Javascript 为什么在返回承诺的循环中使用.then()而不是async/await?
我遇到过多篇文章,主题是如何正确地将新承诺从一个循环中推送到一个数组中,该循环在新承诺中执行多个API调用。Javascript 为什么在返回承诺的循环中使用.then()而不是async/await?,javascript,loops,async-await,promise,es6-promise,Javascript,Loops,Async Await,Promise,Es6 Promise,我遇到过多篇文章,主题是如何正确地将新承诺从一个循环中推送到一个数组中,该循环在新承诺中执行多个API调用。 返回的承诺中的代码应连续运行,循环后,代码应仅在解析数组中的所有承诺时继续运行(因此我使用promise.ALL()) 对我来说直观的版本是: const returnPromisesAsyncAwait=async()=>{ 让pArray=[] for(设i=1;i{ console.log('Entered promise'+i) 等待新的承诺((res)=>setTimeout
返回的承诺中的代码应连续运行,循环后,代码应仅在解析数组中的所有承诺时继续运行(因此我使用
promise.ALL()
)
对我来说直观的版本是:
const returnPromisesAsyncAwait=async()=>{
让pArray=[]
for(设i=1;i{
console.log('Entered promise'+i)
等待新的承诺((res)=>setTimeout(res,i*100))
console.log('完成承诺1内承诺'+i)
等待新承诺((res)=>setTimeout(res,i*500))
console.log('已完成承诺2内承诺'+i)
解析(真)
})
)
}
等待承诺。全部(帕雷)
控制台日志(pArray)
console.log('Done!')
}
returnPromisesAsyncAwait()
在您的示例中,两个代码将导致相同的行为。因此,使用async/await就可以了
循环内的风险是顶级等待;e、 g
for(设i=1;i我通过将循环中的代码放入外部异步函数中解决了“问题”,这样我就不会在向新承诺添加异步函数时遇到问题
asyncProcess=async(i)=>{
console.log('Entered promise'+i)
等待新的承诺((res)=>setTimeout(res,i*100))
console.log('完成承诺1内承诺'+i)
等待新承诺((res)=>setTimeout(res,i*500))
console.log('已完成承诺2内承诺'+i)
}
const returnPromiseWithExternalProcess=async()=>{
让pArray=[]
对于(让我=1;我你更愿意读什么?这些文章有多老?在async/await存在之前,互联网上有很多文章,但是,仅仅因为async/await存在并不意味着以前实现它的方法是无效的。
- const a = await fetchA();
- const b = await fetchB(); // Here fetchB doesn't start until fetchA complete.
+ const [a, b] = Promise.all([
+ fetchA(),
+ fetchB(),
+ ]);