【问题标题】:Asynchronous callback flow control异步回调流控制
【发布时间】:2020-01-11 05:57:11
【问题描述】:

我希望为这个异步瀑布函数提供更好的流量控制。

async.waterfall([
  async.apply(osxAppIconName, options.appFile),
  function(iconFileName, callback) {
    var existingIcon = path.join(options.iconDirectory, iconFileName);
    return callback(null, existingIcon);
  },
  async.apply(fs.copy, options.iconFile), //automatically puts in existingIcon
  async.apply(osxAppIconTouch, options.appFile),
], callback);

现在我正在使用async.apply,它将注入全局函数参数。在上面的这种情况下,我很好,它需要existingIcon 并将其添加为fs.copy 中的倒数第二个参数。制作fs.copy 的参数options.iconfileexitingIcon、回调[function]。太棒了!

但是,假设我稍后需要 exitingIcon。假设我将它推送到我的瀑布函数数组中。

async.apply(newFunction, existingIcon)

如何让existingIcon 使用此功能?全球人?管理起来似乎很头疼!我还认为async.apply 函数在加载时执行,所以如果我将一个变量传递给它,它将在async.apply 执行时使用该变量的值。

想法?我有一个async.switchboard here 的提案。它试图解决这个问题,但它不起作用。

【问题讨论】:

  • 嵌套总是有效的。
  • @Bergi 你在捉弄我吗?
  • 我不是故意的,不。但是,当您多次需要变量时(即不是直瀑布),嵌套回调是一种简单的解决方案,效果很好(比尝试使用全局变量要好得多),通常是要走的路。

标签: javascript node.js asynchronous callback control-flow


【解决方案1】:

使用async.auto 有一个很好的解决方法,它将函数的结果附加到链中的道具。

return async.auto({
  "icon_name": async.apply(osxAppIconName, options.appFile),
  "copy_icon": ["icon_name",
    function(callback, results) {
      results.existing_icon = path.join(options.iconDirectory, results.icon_name);
      return fs.copy(options.iconFile, results.existing_icon, callback);
    }
  ],
  "touch_icon": ["copy_icon", async.apply(osxAppIconTouch, options.appFile)],
}, callback);

对于承诺,请查看:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-10
    • 2012-07-05
    • 2013-07-12
    • 1970-01-01
    • 2012-11-02
    • 1970-01-01
    • 2018-02-07
    相关资源
    最近更新 更多