Async: 使用 AsyncFunction 作为 iteratee 函数会导致 iteratee 被传递为 undefined

创建于 2017-09-26  ·  4评论  ·  资料来源: caolan/async

您使用的是什么版本的异步?
2.5.0

问题发生在哪个环境(节点版本/浏览器版本)
操作系统版本:OS X 10.12.6
节点版本: 8.4.0
浏览器版本:不适用

你做了什么?

// 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 ) 导致迭代next ) 为undefined

docs question

最有用的评论

自 2.3.0 起, async函数的处理方式有所不同——它们不传递回调。 相反,只需返回一个值(或 Promise)。 事实上,在你的例子中,甚至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条评论

自 2.3.0 起, async函数的处理方式有所不同——它们不传递回调。 相反,只需返回一个值(或 Promise)。 事实上,在你的例子中,甚至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 等级