981377660LMT / ts

ts学习
6 stars 1 forks source link

promise 并发 #452

Open 981377660LMT opened 7 months ago

981377660LMT commented 7 months ago
  1. await await 关键字的作用是等待 Promise 完成并返回结果,它会阻塞后面代码的执行,直到 Promise 完成。 因此,如果你在循环中使用 await,那么每次循环都会等待 Promise 完成,这就是串行执行,而不是并发。 如果你想要在使用 await 的同时实现并发,那么你需要使用 Promise.all。

  2. 不用await for 循环中调用promise即可。

981377660LMT commented 7 months ago
  1. Promise 串行执行:在循环中使用 await 关键字等待每个 Promise 完成,这样就会按照顺序一个接一个地执行 Promise。例如:
for (const item of items) {
  await someAsyncFunction(item);
}
  1. Promise 并行执行:直接调用返回 Promise 的函数,不等待其完成,这样就可以同时开始多个 Promise。例如:
items.forEach(item => someAsyncFunction(item));

但是,这样的代码无法知道所有 Promise 何时完成。

  1. Promise 并行执行并知道何时全部完成:使用 Promise.allPromise.all 接收一个 Promise 对象的数组作为参数,当这些 Promise 对象全部完成时,Promise.all 的 Promise 对象才会完成。例如:
await Promise.all(items.map(item => someAsyncFunction(item)));

这样,所有的 Promise 会同时开始,并且你可以知道它们何时全部完成。