どのバージョンの非同期を使用していますか?
2.5.0
どの環境で問題が発生しましたか(ノードバージョン/ブラウザバージョン)
OSバージョン:OS X 10.12.6
ノードバージョン: 8.4.0
ブラウザバージョン:N / A
あなたは何をした?
// templateNames is an array of strings
async.map(templateNames, async (templateName, next) => {
let template;
try {
template = await utils.getFile(templateName);
} catch(err) {
next(err);
}
...
// and so on
何が起こると思いましたか?
next
は反復関数です
実際の結果はどうでしたか?
next
はundefined
目標を達成するために.then().catch()
構文を使用することになりましたが、それでもAsyncFunction
を使用してそれを共有したいと思いました(注:これはasync
定義ではなく、ネイティブAsyncFunction
Object )の結果、iteratee( next
)のタイプはundefined
ます。
async
関数は、2.3.0以降、異なる方法で処理されます。コールバックは渡されません。 代わりに、値(またはPromise)を返すだけです。 実際、あなたの例では、スローされたエラーはAsyncによってキャッチされるため、 try
/ catch
でさえ必要ありません。 これにより、コードが少し単純化されます。
// templateNames is an array of strings
async.map(templateNames, async templateName => {
const template = await utils.getFile(templateName);
...
// and so on
AsyncFunction
ドキュメント: http :
🤦♂️ドキュメントのその部分をより明確に読むことは賢明だったでしょう。 ありがとう。
公平を期すために、その説明はドキュメントサイトではそれほど明白ではありません...🙄📜
私は実際にそれがかなり明確だと思います。 私は最初にドキュメントを一瞥し、その部分を見逃しました。
最も参考になるコメント
async
関数は、2.3.0以降、異なる方法で処理されます。コールバックは渡されません。 代わりに、値(またはPromise)を返すだけです。 実際、あなたの例では、スローされたエラーはAsyncによってキャッチされるため、try
/catch
でさえ必要ありません。 これにより、コードが少し単純化されます。AsyncFunction
ドキュメント: http :