Bax*_*per 3 javascript loops request
我有一个迭代 1000 次的循环,其中每次迭代都会发出一个请求,然后打印该请求的结果。
与下面类似。
let start = console.log(Date.now())
for (i = 0; i < 1000; i++) {
request.then(data => {
console.log(Date.now() - start)
})
}
Run Code Online (Sandbox Code Playgroud)
然而,如果只有 1 次循环迭代,这会导致第一个请求需要更长的时间才能完成。
当 i < 1000 时:
5860
...
Run Code Online (Sandbox Code Playgroud)
当 i < 1 时:
220,
...
Run Code Online (Sandbox Code Playgroud)
然而,出于此脚本的目的,我想在开始循环的下一次迭代之前等待收到每个结果。
Mau*_*ino 11
如果您想坚持使用 ES5 处理 Promise 的方式,您可以使用以下方法:
const start = console.log(Date.now())
// Create a instantly resolved promise
for (let i = 0, p = Promise.resolve(); i < 1000; i++) {
// append new promise to the chain
p = p.then(() => request())
.then(() => console.log(Date.now() - start));
}
Run Code Online (Sandbox Code Playgroud)
async/await
如果您可以使用 ES6 方法,您可以使用如下模式编写:
const asyncLoop = async () => {
const start = console.log(Date.now())
for (let i = 0; i < 1000; i++) {
const data = await request();
console.log(Date.now() - start);
}
}
asyncLoop();
Run Code Online (Sandbox Code Playgroud)
不过,您真正想要一个接一个地发出请求的机会实际上非常小,因此,如果您想同时发出请求,但在所有请求都解决后执行某些操作,您可以使用Promise.all(...)
const start = console.log(Date.now())
const requests = [request1, request2, ...];
Promise.all(requests)
.then(() => console.log(Date.now() - start));
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
8085 次 |
最近记录: |