多个Promise顺序执行的解决思路
程序员文章站
2022-06-09 20:04:18
...
问题:多个延时器顺序执行,依次打印
function a() {
setTimeout(() => {
console.log(1)
}, 200)
}
function b() {
setTimeout(() => {
console.log(2)
}, 10)
}
function c() {
setTimeout(() => {
console.log(3)
}, 30)
}
// a()
// b()
// c()
// console.log(4)
解决方案
function a() {
return new Promise((resolve, reject) => {
setTimeout(resolve, 200, 1)
})
}
function b() {
return new Promise((resolve, reject) => {
setTimeout(resolve, 10, 2)
})
}
function c() {
return new Promise((resolve, reject) => {
setTimeout(resolve, 30, 3)
})
}
1. 使用回调函数解决
a().then(res => {
console.log(res)
b().then(res => {
console.log(res)
c().then(res => {
console.log(res)
console.log(4)
})
})
})
2. 使用promise/then链式调用
Promise.resolve().then(() => a())
.then(res => console.log(res))
.then(() => b())
.then(res => console.log(res))
.then(() => c())
.then(res => console.log(res))
.then(() => console.log(4))
3. 使用async/await解决
async function log(a, b, c) {
const args = [].slice.call(arguments, 0)
for (let item of args) {
let res = await item()
console.log(res)
}
console.log(4)
}
log(a, b, c)
上一篇: ORACLE老版本下载地址
推荐阅读
-
使用Promise链式调用解决多个异步回调的问题
-
SQLServer按顺序执行多个脚本的方法(sqlcmd实用工具使用方法)
-
详解promise.then,process.nextTick, setTimeout 以及 setImmediate的执行顺序
-
解决循环中setTimeout执行顺序的问题
-
Java Filter过滤器(拦截路径和方式的配置+生命周期+多个过滤器的先后执行顺序)
-
node.js多个异步过程中判断执行是否完成的解决方案
-
聊聊golang中多个defer的执行顺序
-
用Promise解决多个异步Ajax请求导致的代码嵌套问题(完美解决方案)
-
python 中多个装饰器的执行顺序
-
setTimeout、Promise、Async/Await 的执行顺序