JS 如何顺序执行多个异步任务?

在 JS 中可以使用 Promise 和 async/await 来顺序执行异步任务。

使用 Promise 通过 then() 方法的链式调用来实现

// 定义异步任务 asyncTask1
function asyncTask1() {
 return new Promise(resolve => {
   // 异步操作:在 1000 毫秒后调用 resolve 方法
   setTimeout(() => {
     console.log('Async task 1');
     resolve();
   }, 1000);
 });
}

// 定义异步任务 asyncTask2
function asyncTask2() {
 return new Promise(resolve => {
   // 异步操作:在 2000 毫秒后调用 resolve 方法
   setTimeout(() => {
     console.log('Async task 2');
     resolve();
   }, 2000);
 });
}

// 顺序执行异步任务
asyncTask1().then(() => {
 // 当 asyncTask1 完成后,执行 asyncTask2
 return asyncTask2();
}).then(() => {
 // 执行完异步任务1和异步任务2后的逻辑
});

使用 async/await 可以将异步任务看做同步人物来执行

async function runAsyncTasks() {
 await asyncTask1();
 await asyncTask2();
 // 执⾏完异步任务1和异步任务2后的逻辑
}
runAsyncTasks();

生成器(Generator)确实是一种特殊的函数,其函数体内可以使用 yield 关键字。生成器函数使用 function* 声明,并且在函数体内可以通过 yield 暂停函数的执行,将一个值传递给生成器的调用者。

生成器函数的调用返回一个迭代器对象,该迭代器对象可以通过调用 next() 方法来依次获取生成器函数中使用 yield 产生的值。每次调用 next() 都会使生成器函数执行到下一个 yield,并返回一个包含 valuedone 属性的对象,其中 valueyield 表达式的结果,而 done 表示生成器函数是否已经执行完成。

function* main() {
 const res1 = yield fn1('开始')
 const res2 = yield fn2(res1)
 const res3 = yield fn3(res2)
 console.log(res3, '全部执⾏完毕')
}
const task = main()
task.next()
function fn1(data) {
 setTimeout(() => {
 console.log('fn1执⾏', data)
 task.next('fn1执⾏完毕')
 }, 1000)
}
function fn2(data) {
 setTimeout(() => {
 console.log('fn2执⾏', data)
 task.next('fn2执⾏完毕')
 }, 1000)
}
function fn3(data) {
 setTimeout(() => {
 console.log('fn3执⾏', data)
 task.next('fn3执⾏完毕')
 }, 1000)
}
console.log('我是最开始同步执⾏的')

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值