Async: iteratee関数としてAsyncFunctionを使用すると、iterateeは未定義として渡されます。

作成日 2017年09月26日  ·  4コメント  ·  ソース: caolan/async

どのバージョンの非同期を使用していますか?
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は反復関数です

実際の結果はどうでしたか?
nextundefined


目標を達成するために.then().catch()構文を使用することになりましたが、それでもAsyncFunctionを使用してそれを共有したいと思いました(注:これはasync定義ではなく、ネイティブAsyncFunction Object )の結果、iteratee( next )のタイプはundefinedます。

docs question

最も参考になるコメント

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

全てのコメント4件

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

🤦‍♂️ドキュメントのその部分をより明確に読むことは賢明だったでしょう。 ありがとう。

公平を期すために、その説明はドキュメントサイトではそれほど明白ではありません...🙄📜

私は実際にそれがかなり明確だと思います。 私は最初にドキュメントを一瞥し、その部分を見逃しました。

このページは役に立ちましたか?
0 / 5 - 0 評価