Массив Desctructure, возвращаемый функцией await - PullRequest
0 голосов
/ 01 мая 2020

Если я получаю значения, возвращаемые await Promise.all (), как показано ниже:

const [foo, bar] = await Promise.all<Object, Object>([
    fooPromise(),
    barPromise()
]).catch(err => next(err));

Я получаю сообщение об ошибке: Type 'void | [Object, Object]' must have a '[Symbol.iterator]()' method that returns an iterator.

([foo, bar] помечается как ошибка )

1 Ответ

2 голосов
/ 01 мая 2020

Когда вы catch обещаете, полученное обещание преобразует в значение, возвращаемое .catch. Таким образом, здесь, если есть ошибка, выражение, которое [foo, bar] будет пытаться деструктурировать, будет тем, что возвращает next(err), а это не то, что вам нужно.

Вы можете перехватить ошибки снаружи звонка Promise.all:

try {
    const [foo, bar] = await Promise.all<Object, Object>([
        fooPromise(),
        barPromise()
    ]);
    // use foo and bar
} catch(err) {
    next(err);
}

Или без await:

Promise.all<Object, Object>([
    fooPromise(),
    barPromise()
])
    .then(([foo, bar]) => {
        // use foo and bar
    })
    .catch(err => next(err));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...