で待つ:私は非同期を使用するようにリファクタリングしたい非同期は、私が期待どおりに動作、次の機能を持っているの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が非同期に実行され、関数が実行して終了するため、関数を破壊することになります。
forEachが同期的に実行されるように、非同期的に使用できる方法はありますか。私は発電機にリファクタリングすることができますか?
"forEachが現在非同期で実行されているため、これは明らかに関数を破壊します" ---何も変更されません。 'Array.prototype.forEach'は' async'関数を受け入れることを期待していないので、それを "普通の"関数として呼び出すでしょう。したがって、すべての関数はすぐに呼び出されます。 – zerkms
"forEachが同期的に実行するために非同期で使用できる方法はありますか?---単にforまたはfor-of'ループを使用して配列を反復処理します。また、 'createObjectFrom'を' async'に変更する必要があります。 – zerkms
[この1つ](https://github.com/toniov/p-iteration)を使ってこのようなことをスムーズに行うことができます。モジュールを気にする必要がなければ試してみてください。 –