1、Promise异步简化回调
使用的背景:同时存在两个或者多个网络请求,且第二个请求要使用第一个请求返回的数据
代码:
const app = getApp()
Page({
data: {
},
onLoad: function () {
this.function_1().then(res=>{
console.log('方法1结果:',res)
//这里可以把结果放到GetUserEntity_2作为参数
this.function_2().then(res=>{
console.log('方法2结果:',res)
})
}
)
},
function_1() {
return new Promise(function (resolve, reject) {
// 这里的延时可以换为网络请求
setTimeout(function () {
let result = '服务器返回的结果11';
resolve(result) ;
// 失败时用reject返回
// reject(result)
}, 3000) //延时
})
},
function_2() {
return new Promise(function (resolve, reject) {
// 这里的延时可以换为网络请求
setTimeout(function () {
let result = '服务器返回的结果22';
resolve(result) ;
}, 3000) //延时
})
},
})
2、简易回调
app.js
App({
onLaunch() {
},
test(readyCallback){
this.readyCallback=readyCallback
this.readyCallback("res")
},
globalData: {
readyCallback:null
}
})
index.js
const app = getApp()
// const aa = app.globalData.aa
Page({
data: {
},
onLoad() {
app.test(
(res) => {//回调函数
console.log("回调函数jjj")
}
)
},
})
3、代理接口回调
场景:有多个回调接口的时候使用
代码接口图为:
app.js代码
//'mark' of undefined 报错,解决方法:需要增强编译
import AA from './utils/aa'
App({
onLaunch() {
const aa = AA.aaBuild
this.globalData.aa = aa
this.globalData.aaDelegateInterface = AA.aaDelegate
},
globalData: {
aa: null, //蓝牙SDK
aaDelegateInterface: null,//蓝牙代理接口
}
})
aa.js代码
// 代理接口
const aaDelegate = () => {
console.log("aa初始化代理接口==aaDelegate")
return {
// aaa1(){},//可有可无,没有也能触发回调
}
}
const AASdk = function () {
console.log("==初始化const AASdk==")
// this._aaDelegate = aaDelegate()//代理方法,增加这个方法的话会触发两次第三行代码:console.log("aa初始化代理接口==aaDelegate")
}
// 给外部调用的方法
AASdk.prototype.test = async function (device) {
console.log("==测试方法test==")
const that = this
setTimeout(() => {
that._aaDelegate.aaa1()//调用回调方法
}, 2000);
}
module.exports = {
aaDelegate,
aaBuild: new AASdk()
}
index.js代码
const app = getApp()
const aa = app.globalData.aa
Page({
data: {
},
onLoad() {
this.setAaPageDelegate() // 设置代理接口
aa.test("22")//调用
},
// 设置代理接口
setAaPageDelegate() {
const aaDelegate = app.globalData.aaDelegateInterface()
aa._aaDelegate = aaDelegate
aaDelegate.aaa1=this.aaa1
},
//回调方法
aaa1() {
console.log("触发回调333")
},
})
代码下载地址:https://download.csdn.net/download/wy313622821/15651468
4、await的用法
async onLoad() {
//匿名函数 ( () => {//函数代码 }),( () => {//函数代码 })()执行匿名函数
console.log("测试输出22")
const aa = await this.test()
console.log(aa)
console.log("测试输出33")//测试结果:要等上面的await运行结束才会执行
},
test() {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve("你好")
}, 2000);
})
}
运行结果:测试输出33 要等上面的await运行结束才会执行
5、匿名函数
( () => {//函数代码 }), //匿名函数
( () => {//函数代码 })() //表示执行匿名函数
6、多个异步的合并
const pro1 = new Promise((resolve, reject)=>{resolve(1);});
const pro2 = new Promise((resolve, reject)=>{resolve(2);});
const pro3 = new Promise((resolve, reject)=>{resolve(3);});
//三个数据请求
Promise.all(pro3 ,pro2 ,pro1 ).then(
(data) => {
//把三个异步请求返回数据合成一个数组
//返回数据的顺序和`all()`里面的异步参数顺应一致
console.log(data); // [3,2,1]
},
error(err)
).catch(e =>{})
.finally(()=>{})