期待どおりに機能する次の機能があります。
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;
}
async await を使用するようにリファクタリングし、次のように forEach の本体で async 関数を呼び出します。
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 が非同期で実行され、関数が実行されて終了するため、これは明らかに関数を壊します。
forEach を同期的に実行するために async await を使用する方法はありますか。ジェネレーターにリファクタリングできますか?