В чем отличие async.map от async-библиотеки и Promise.map от bluebird? - PullRequest
0 голосов
/ 07 марта 2019

Я объясню себе:

Я хочу использовать async / await с одной из этих библиотек (async или bluebird).

Я не понимаю, почему это работает хорошо:

const promises = Promise.map (someArray, async item => {                
      const result = await getSomething(item);
      return {...item, ...result}
});

const promisesResults = await Promise.all(promises);

Но то же самое с async.map не делает.Это возвращает меня undefined.

Спасибо всем!

1 Ответ

1 голос
/ 07 марта 2019

async - это устаревшая библиотека, которая решала те же проблемы, что и обещания, до распространения шаблона обещаний и появления нативных обещаний. async библиотека основана на обратном вызове и не знает об обещаниях и async функциях , которые являются синтаксическим сахаром для обещаний ES6.

Фрагмент работает, потому что Promise.all ожидает массив обещаний:

Promise.all(promises);

И массив обещаний предоставляется с массивом map с async обратным вызовом функции:

someArray.map(async item => { ... })

Это не будет работать с библиотекой async, потому что она должна работать с функцией итераций на основе обратного вызова и не знает об обещаниях, которые возвращает async функция.

Поскольку в обещаниях ES6 отсутствуют некоторые расширенные функции из библиотеки async, их можно дополнить с помощью Bluebird API или обещания ponyfills .

...