比如,我需要按顺序重复 AJAX 请求 N 次。
通常(即没有 async/await),我会使用 reduce
来链接 promises:
function timeout (ms = 1000) {
return new Promise(resolve => setTimeout(resolve, ms))
}
function request (message, ms = 1000) {
return timeout(ms).then(() => console.log(message))
}
function makeArray (i) {
return new Array(i).fill(null);
}
makeArray(5).reduce(
(promise, _, i) => promise.then(() => request(i)),
Promise.resolve()
)
如何使用 async/await 重写这段代码?
我想做 await request(i)
而不是 promise.then(() => request(i))
。
我所有的尝试都以并行运行 promise 告终。我要顺序。
最佳答案
记住 await
只能从 async
函数中调用。
这里我只是包裹在一个函数 run
中,它甚至可以是一个 IIFE..
在大多数情况下,当你开始使用 async/await
时,无论如何你都会从另一个 async
函数调用,所以这个小的 run
不需要 stub 。
function timeout (ms = 1000) {
return new Promise(resolve => setTimeout(resolve, ms))
}
function request (message, ms = 1000) {
return timeout(ms).then(() => console.log(message))
}
async function run() {
for (let trys = 0; trys < 5; trys ++) {
await request(trys);
}
}
run();
关于javascript - 使用 async/await 动态生成 promise 链,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49275311/