Многократная обработка ошибок вызова в NodeJS - PullRequest
0 голосов
/ 24 июня 2019

Я обрабатываю несколько записей, используя async / await и для параллельного использования Promise.Все мои примеры кода ниже

  let results = [100,200]
  let promises = results.map(async record => {
   try { 
     return await processingRecords(record);  
   } catch (err) {
   }
  });
  await Promise.all(promises);

async function processingRecords(item) {
 switch (item['#type']) {
    case 'case1':
        await Request1(item)
        await Request2(item)
    break
    case 'case2':
        await Request3(item)
 }
}

Но проблема в том, что если Request1 получает какую-либо ошибку, я не могу поймать ошибку изВызов Request2, как обработать ошибку от обоих вызовов

Ответы [ 2 ]

1 голос
/ 24 июня 2019

Вы можете сделать несколько вещей, чтобы звонки продолжались. Захват ошибок вокруг операторов await и возврат объединенного результата Request1 и Request2 будут работать:

Например:

async function processingRecords(item) {
    switch (item['#type']) {
        case 'case1':
            let combinedResult = {};
            try { 
                combinedResult.Request1Result = await Request1(item);
            } catch (err) {
                combinedResult.Request1Error = err;
            }
            try { 
                combinedResult.Request2Result = await Request2(item);
            } catch (err) {
                combinedResult.Request2Error = err;
            }
            // Keep the promise chain intact.;
            return combinedResult;
        case 'case2':
            return await Request3(item);
        }
}


let promises = results.map(async record => {
    try { 
        return await processingRecords(record);  
    } catch (err) {
        // Keep the promise chain intact by throwing err here.
        throw err;
    }
});

let overallResult = await Promise.all(promises);
console.log(overallResult);
0 голосов
/ 24 июня 2019

Вы можете попробовать это

async function processingRecords(item) {
 switch (item['#type']) {
    case 'case1':
    [req1 , req2] = [await Request1(item),await Request2(item)]
    break;
    case 'case2':
       await Request3(item)
 }
}
...