Я знаю Array.prototype.map
- синхронная операция.С другой стороны, если функция map является функцией обратного вызова (асинхронной), undefined
немедленно вернется.
Поэтому мой вопрос: может ли следующая функция безопасно предположить, что все функции обратного вызова были выполнены?
ПримерКод может сделать мой вопрос более понятным:
results = files.map(file => {
fs.readFile(file, (err, data) => {
if (err) throw err;
return process(file) //will return the processed value, NOT a promise
});
)
//I know results will be [undefined, undefined, undefined ...]
//But can I assume all the files have been processed if I reach here?
console.log('done')
Мне наплевать на возвращаемые значения.Вот почему я не хочу беспокоиться о await/async
.Я просто хочу убедиться, что все функции обратного вызова вызваны и возвращены.Это возможно?
------- update --------
В дополнение к ответу, я нашел, что эти статьи также помогают мне понять проблему: https://medium.com/@antonioval/making-array-iteration-easy-when-using-async-await-6315c3225838
Использование async / await с циклом forEach
Мне нужно использовать обещание, чтобы убедиться, что все итераторы обратного вызова завершены.Таким образом, использование bluebird promise.map помогает уменьшить стандартные коды