簡體   English   中英

Continue.map 循環后 util.promisify 請求迭代失敗(異步等待)

[英]Continue .map loop after util.promisify request fails in iteration (async await)

我有下面的異步 function 接受 4 個對象的數組。 第一個在 a.map 循環中處理,該循環執行查詢並導致錯誤(在 await executeQuery(queryString) 中)。 當這第一個 object 處理完成時,循環結束,其他 3 個對象不處理。

async function myFunction(arrayOfObjects, param1) { 

     const promises = arrayOfObjects.map(async function (currElement, i) {
          var queryString = 'www.querystring.com?APIparameter=param1';
          
          const executeQuery = util.promisify(request);

          await executeQuery(queryString).then(data => {

          //process data here using currElement, i
          
          }).catch(err => console.log('error: ', err));   
     });

     await Promise.all(promises).catch();
}

我最初只有 await Promise.all(promises) 並考慮將其修改為 await Promise.all(promises).catch(); 可以解決問題,但在第一個 object 迭代時仍然失敗。

我想知道在executeQuery中遇到錯誤后如何最好地繼續執行.map循環。

謝謝,麻煩您了!

不是 100% 確定這段代碼發生了什么,但我會改變一些事情。 首先,在循環中使用await不是一個好習慣,其次,您的promises數組可能不是您所期望的,因為await會產生,直到每個 promise 在循環內得到解決。 map Promises返回Promise以生成一個 Promise 數組,每個 Promise 將在自己的時間內解析和處理數據。 然后,您可以await所有承諾並使用try/catch捕獲任何錯誤。 類似於以下內容的內容應該可以滿足您的期望...

async function myFunction(arrayOfObjects, param1) {

    const executeQuery = util.promisify(request); 

    const promises = arrayOfObjects.map((currElement, i) => {

        const queryString = 'www.querystring.com?APIparameter=param1';

        return executeQuery(queryString).then(data => {

             // process data here using currElement, i
        });   
    });

    try {

        await Promise.all(promises);

        // all promises will be resolved here

    } catch (err) {
        console.log('error: ', err);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM