У меня есть следующая функция, которая работает, как ожидалась:асинхронные ждет в Foreach
createObjectFrom(record) {
let obj = {};
this.opts.transformers.forEach((transformer, index) => {
const headerIndex = findIndex(this.headers, (header) => {
return header === transformer.column;
});
const value = transformer.formatter(record[headerIndex]);
obj[transformer.field] = value;
});
return obj;
}
Я хочу, чтобы реорганизовать его использовать асинхра ОЖИДАНИЕ и вызвать функцию асинхронной в теле ForEach, как это:
createObjectFrom(record) {
let obj = {};
this.opts.transformers.forEach(async (transformer, index) => {
const headerIndex = findIndex(this.headers, (header) => {
return header === transformer.column;
});
const result = await this.knex('managers').select('name')
console.log(result);
const value = transformer.formatter(record[headerIndex]);
obj[transformer.field] = value;
});
return obj;
}
Это, очевидно, нарушит функцию, поскольку forEach теперь выполняет асинхронно, и функция просто выполнит и уйдет.
Есть ли способ, которым я могу использовать async, ждут, чтобы forEach выполнялся синхронно. Могу ли я реорганизовать генераторы?
«Это, очевидно, нарушит функцию, поскольку forEach теперь выполняет асинхронно» - это ничего не изменит. 'Array.prototype.forEach' не ожидает принятия' async' -функций, поэтому он будет вызывать его как «нормальную» функцию. Таким образом, все функции будут вызываться немедленно. – zerkms
«Есть ли способ, которым я могу использовать async, ждут, чтобы forEach выполнялся синхронно» - просто используйте цикл 'for' или' for-of' для итерации по массиву. Вам также придется изменить 'createObjectFrom' как' async'. – zerkms
Вы можете использовать этот материал плавно, используя [этот] (https://github.com/toniov/p-iteration), попробуйте, если вы не против использования модуля. –