[英]How do I handle promises inside loop inside async function in javascript?
async func(){
try{
let iter=[1,2,3]
for (i of iter){
let result=await someFunc()
pool.query("some query",arrWithResult)
}
}catch(err){console.log(err)}
}
在這里,循環等待等待。 但我不想那樣。 我需要按順序執行結果和 sql 查詢,但循環應該繼續而不等待。 執行查詢時,我還需要當前 i 的值。 否則,我會將這些承諾推入數組並執行 Promise.all(arr)
async func(){
try{
let iter=[1,2,3]
for (i of iter){
someFunc().then(body=>{pool.query("some query",arrWithResult).catch(err=>err)
}
}catch(err){console.log(err)}
}
這個可以嗎? 我也想過讓 then 部分異步,但我應該添加另一個 try catch 塊嗎?
那么,什么是最好的方法呢? 或者我應該 go 用於 then/catch。 在做 Promise.all 時,iter 的值會丟失。
也許我想得不夠(或者你想得太多),但你為什么不只是重構為另一個異步 function 來完成循環的每次迭代需要做的事情,然后Promise.all()
的列表返回承諾讓他們解決?
像這樣的東西:
async func f1() {
const iter = [ 1, 2, 3 ] ;
return await Promise.all( iter.map(f2) );
}
async func f2(i) {
const result = await someFunc() ;
return await pool.query( "some query" , arrWithResult );
}
來電者只需要說...
const responses = await f1();
```
不要為此使用迭代器變量 - 這是 Array.map() 的工作
Promise.all([1,2,3].map(i => someFunc().then(body => pool.query("some query",arrWithResult).catch(err=>err));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.