如何在uni-app项⽬⾥让多个quest()异步请求按顺序
执⾏——封装uni。。。
如果在你的uni-app项⽬⾥,出现以下情况:
1) 你希望⽤第1个quest请求返回的结果作为第2个quest请求的参数;
2)如果你发现Storage⾥存储的数据根本获取不到,或者即使获取到也是上⼀次没清空的历史数据,Storage传参失败;
3)你希望出现的代码执⾏顺序并没有按照你的预期顺序执⾏;
那么很显然,你需要让quest()异步请求变成同步请求,因为uni-app的官⽹没有提供同步请求⽅法questSync();
所以我们需要使⽤Promise去封装quest(),或者使⽤ async 和 await去封装quest(),这样
接下来,我会分多个版本的⼩项⽬去录屏调式演⽰出现这种状况的原因:
温馨提⽰:每个演⽰项⽬⾥都会⽤的md5.js⽂件,我上传的md5.js⽂件下载地址如下:
范例1:
项⽬结构截图如下:
如何启动真机调试app程序,请按如下截图说明操作,后⾯⼏个项⽬
范例中不再啰嗦同样的话:
commons\sign-tool.js⽂件代码如下:
var md5 = require('./md5.js');
sign : function(){
var greeting = "welcome to my world";
var greetingmd5 = md5.hex_md5(greeting)
uni.setStorageSync("greeting",greeting);
uni.setStorageSync("greetingmd5",greetingmd5); console.log('sign-tool.js 开始打印输出以下内容:'); console.log("明⽂:"+greeting);
console.log("密⽂:"+greetingmd5);
console.log('sign-tool.js 结束打印输出');
php如何运行代码}
}
index\index.vue⽂件代码如下:
<template>
<view>
<button type="primary" @click="clickMe">测试Storage传参</button>
</view>
</template>
<script>
var _self;
var tool = require('../../commons/sign-tool.js');
export default {
data() {
return {
}
},
onLoad: function() {
_self = this;
},
methods: {
clickMe: function() {
tool.sign();
var greeting = StorageSync('greeting');
var greetingmd5 = StorageSync('greetingmd5');
console.log('greeting: ' + greeting);
console.log('greetingmd5: ' + greetingmd5);
}
}
}
</script>
整个v1版本的项⽬代码已全部贴完,我将录屏演⽰调试代码的执⾏流程,即使你知道代码会怎么运⾏,再看看我发的⼩视频⼜不碍啥事,因为后⾯的⼏个项⽬范例的调试视频你是⼀定会看的。
范例1演⽰调试代码的视频如下:
范例1调试⼯具的控制台会输出如下截图内容:
根据调试代码的视频和输出结果,我们可以得出如下结论:
本范例流程执⾏正常 能按照我们预期的代码执⾏顺序运⾏。
范例2:
接下来演⽰的⼏个项⽬范例,我们都会⽤到PHP实现的Restful api 接⼝,⽤Redis作为数据存储服务器,我将使⽤ThinkPHP 6.0.2这个最新版本框架来写后台数据接⼝。
在演⽰范例2之前,我们需要先把后台数据接⼝写好,接下来我们先来写PHP实现的后台代码吧。
安装程序,⼀路Next就好,
当安装出现Choose the command-line PHP you want to use:请浏览选择⽂件的完整路径
D:\phpstudy\Extensions\php\php7.3.
接下来以更新安装的⽅式安装ThinkPHP项⽬需要的⼀切依赖⽂件
C:\Users\ZiGoo>D:
D:\>cd D:\phpstudy\WWW
D:\phpstudy\WWW>composer update topthink/framework
WWW\config\cache.php⽂件代码如下:
<?php
// +----------------------------------------------------------------------
/
/ | 缓存设置
// +----------------------------------------------------------------------
return [
// 默认缓存驱动
'default' => env('cache.driver', 'file'),
// 缓存连接⽅式配置
'stores' => [
'file' => [
// 驱动⽅式
'type' => 'File',
// 缓存保存⽬录
'path' => '',
// 缓存前缀
'prefix' => '',
// 缓存有效期 0表⽰永久缓存
'expire' => 0,
// 缓存标签前缀
'tag_prefix' => 'tag:',
// 序列化机制例如 ['serialize', 'unserialize']
'serialize' => [],
],
// redis缓存
'redis' => [
// 驱动⽅式
'type' => 'redis',
// 服务器地址
'host' => '127.0.0.1',
// 缓存前缀
'prefix' => '',
// 缓存有效期 0表⽰永久缓存
'expire' => 0,
// 序列化机制例如 ['serialize', 'unserialize']
'serialize' => [],
]
,
// 更多的缓存连接
],
];
WWW\route\app.php⽂件代码如下:
<?php
// +----------------------------------------------------------------------
// | ThinkPHP [ WE CAN DO IT JUST THINK ]
// +----------------------------------------------------------------------
// | Copyright (c) 2006~2018 thinkphp All rights reserved.
// +----------------------------------------------------------------------
/
/ | Licensed ( /licenses/LICENSE-2.0 )
// +----------------------------------------------------------------------
// | Author: liu21st <liu21st@gmail>
// +----------------------------------------------------------------------
use think\facade\Route;
// GET '2977a2v278.zicp.vip/public/index.ate'
Route::get('ate','Token/generateToken');
// GET 2977a2v278.zicp.vip/public/index.php/zigoo.tutorial.sign.call
Route::get('zigoo.tutorial.sign.call','Tutorial/callSign');
WWW\app\controller\Token.php⽂件代码如下:
<?php
namespace app\controller;
use app\BaseController;
use think\facade\Log;
use think\facade\Cache;
class Token extends BaseController {
/*
[myth@contoso ~]$ curl --location --request GET '2977a2v278.zicp.vip/public/index.ate' {"status":"ok","data":{"token":"qn0aulb59sj293fh9qiijoecn8","time":1589476476}}
[myth@contoso ~]$
*/
public function generateToken(){
$session_create_id = session_create_id();
$time = time();
$token = array(
'token' => $session_create_id,
'time' => $time
);
Cache::store('redis')->set($token['token'],$token['time'],3600);
exit(json_encode(['status' => 'ok','data' => $token]));
}
}
WWW\app\controller\Tutorial.php⽂件代码如下:
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论