promise实现串行
promise实现串行实现一:主要利用promise.then中返回一个new Promise()实现
//then链式调用可以实现串行执行
//promise.then嵌套这种情况(每个then返回一个新的自定义promise),如果任何一个then里的promise执行了reject则就会被catch捕捉
//promise.then默认也是返回一个promise,但这个promise状态是fulfilled,确定的
let p = new Promise((resolve, reject) => {
resolve('hi')
//reject('error1')
})
let p1 = p.then((res) => {
//请求api1, 得到结果1
return new Promise((resolve, reject) => {
//resolve(res+' again')
reject('第二步出错')
})
}).then((res) => {
//请求api2, 得到结果2
return new Promise((resolve, reject) => {
resolve(res+' again 2')
})
}).then((res) => {
console.log(res)
}).catch(e => {
console.log(e)
})
promise实现串行实现二:使用async, await实现
function sleep(n, res) {
return new Promise((resolve, reject) => {
setTimeout(() => {
resolve()
console.log(res)
}, n)
})
}
async function task(){
console.log('开始依次请求接口:')
await sleep(3000,'接口1返回数据')
await sleep(2000,'接口2返回数据')
await sleep(2000, '接口3返回数据')
}
task()
promise实现并行任务
使用 Promise.all()实现并行执行
//Promise.all()实现并行执行
var promises = function() {
//map做的事情是映射,原数组被映射为另一个数组
return [3000, 2000, 1000].map(current => {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log(current)
reject(current)
}, current)
})
})
}
//promises数组里的promise并行执行,最后的then为所有promise resolve的返回值数组集合
//并且res中的结果是跟调用promise的顺序是一致的,尽管可能promise执行完成的顺序不一致
Promise.all(promises()).then((res) => {
console.log('all done, return ' + res)
})
本文由 dealdot <dealdot#163.com> 创作, Full Stack Developer @ DeepBlue
本文最后编辑时间为: Jul 1, 2021 at 19:29 pm
转载请注明来源