async.series関数内でasyncawaitを使用できますか?
簡単な実験をいくつか行いましたが、期待どおりに機能しませんでした。
はい、できます! ただし、コールバックを使用する代わりに、値を返すか、エラーをスローするだけです。 http://caolan.github.io/async/global.html
わかりました-私が何かを誤解した場合は許してください😄このように?
const result = await async.each(openFiles, async (file) => {
try: {
await asyncOperation(file);
return null
} catch(err) {
return err
}
})
async
関数はエラーを自動的に拒否に変換するため、エラーに対して特別なことをしたい場合を除いて、例は次のようになります。
const result = await async.each(openFiles, async (file) => {
await asyncOperation(file);
})
改善されたスニペットをありがとう。 単純なシナリオでは機能するようですが、次の設定では機能しません。
for (const tasks of fileTasks) {
const result = await async.each(tasks, async (file) => {
await asyncOperation(file);
})
}
for-ofループで非同期操作が可能になることを理解していましたか?
async.each
はPromiseを返さないため、 await
返すことはできません。
ああ、わかりました。 したがって、for-of async / awaitオプションを使用することは、asyncでは適切なパターンではありません。 これが非同期のロードマップに含まれている場合は、今ですか?
いくつかの狂った科学が計画されています。 😉
またはutil.promisify()
😉
(またはpify()
)
なぜこれがasync.series
に関する質問からasync.each
ですか?
const _async = require('async');
const _ = require('lodash');
public doSomething = async(num) : Promise<any> => {
return num*num + 1;
}
public async getResults() {
let results = new Array<any>();
let tasks = [];
try {
const list = [1,2,3,4,5,6,7,8,9,10];
list.forEach((item) => {
tasks.push((callback) => {
this.doSomething(item.then(
(res) => {
results.push(res);
callback(null, res);
}
);
})
})
results = await new Promise((resolve) => {
_async.series(tasks, (err, res) => {
console.log(res);
if (err) {
results.push(err);
}
resolve(results);
})
});
} catch (err) {
results.push(err.message);
console.log(err);
}
return _.join(results, '\r\n');
}
@aearlyちょっとフェン、どの特別バージョンがasync / awaitをサポートしているか教えていただけますか?
caolan / asyncバージョン2.6.0を使用しています
最も参考になるコメント
いくつかの狂った科学が計画されています。 😉