Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么在返回承诺的循环中使用.then()而不是async/await?_Javascript_Loops_Async Await_Promise_Es6 Promise - Fatal编程技术网

Javascript 为什么在返回承诺的循环中使用.then()而不是async/await?

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

我遇到过多篇文章,主题是如何正确地将新承诺从一个循环中推送到一个数组中,该循环在新承诺中执行多个API调用。
返回的承诺中的代码应连续运行,循环后,代码应仅在解析数组中的所有承诺时继续运行(因此我使用
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(),
+ ]);