说,我需要按顺序重复一次AJAX请求。
通常(即没有异步/等待),我会使用reduce
链接承诺:
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重写此代码?
而不是promise.then(() => request(i))
我想做await request(i)
。
我所有的尝试最终并行地运行了承诺。我想顺序。
答案 0 :(得分:3)
请记住await
只能从async
函数调用。
我刚刚在一个函数run
中包裹,它甚至可能是一个IIFE ..
在大多数情况下,当您开始使用async / await
时,您无论如何都要从另一个async
函数进行调用,因此不需要这个小run
存根。
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();
&#13;