1. 利用promise
三种状态:(不可逆)
pending 初始状态
fulfilled 成功
rejected 失败
代码部分:
new Promise((resolve,reject) =>{
setTimeout(() =>{
console.log(1);
resolve()
},1000)
}).then((res) => {
setTimeout(() =>{
console.log(2);
},2000)
})
运行结果:
代码部分:
let p1 = new Promise((resolve,reject) =>{
setTimeout(() =>{
console.log('p1');
resolve()
},2000)
})
let p2 = new Promise((resolve,reject) =>{
setTimeout(() =>{
console.log('p2');
resolve()
},1000)
})
let p3 = new Promise((resolve,reject) =>{
setTimeout(() =>{
console.log('p3');
resolve()
},3000)
})
Promise.all([p1,p2,p3]).then((res) =>{
console.log('全部完成');
console.log(res);
}).catch((err) =>{
console.log('失败');
console.log(err);
})
运行结果:
代码部分:
new Promise((resolve,reject) =>{
setTimeout(() =>{
console.log(1);
resolve()
},1000)
}).then((res) => {
setTimeout(() =>{
console.log(2);
},2000)
})
let p1 = new Promise((resolve,reject) =>{
setTimeout(() =>{
console.log('p1');
resolve('p1')
},2000)
})
let p2 = new Promise((resolve,reject) =>{
setTimeout(() =>{
console.log('p2');
resolve()
},1000)
})
let p3 = new Promise((resolve,reject) =>{
setTimeout(() =>{
console.log('p3');
resolve()
},3000)
})
Promise.race([p1,p2,p3]).then((res) =>{
console.log('全部完成');
console.log(res);
}).catch((err) =>{
console.log('失败');
console.log(err);
})
运行结果:
2. 利用 async await
代码部分:
async foo(){
console.log('foo');
let res = await this.timeOut()
console.log(res);
},
timeOut(){
return new Promise((resolve,reject) =>{
setTimeout(() =>{
console.log(1);
resolve('resolved')
},1000)
})
运行结果:
总结:
promise.race 有一个请求,不知道什么时候执行,希望这个请求有一个超时时间,超时时间3s,超时时间可以设置定时器,需要用race,如果定时器先执行就是超时,如果返回器先执行,说明请求没有超时。
promise.all 项目中需要全部上传后才能把对应的数据上传到数据库中,返回对应的id。这个就需要用all
async返回值是一个对象。
在小程序端,如何使用 async/await 语法?
把这个 regenerator/runtime.js 文件引用到有使用 async/await 的文件当中。(对应runtime.js文件可私信,文件格式是固定的,适用于项目。博客暂无法上传)
import regeneratorRuntime from '../../utils/runtime.js'