我希望这个异步瀑布功能有更好的流量控制。
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.iconfile
,exitingIcon
,回调[function]
。哪个好极了!
但是,我想稍后我需要exitingIcon。假设我将其推入瀑布函数数组。
async.apply(newFunction, existingIcon)
我如何获得existingIcon
此功能?全局?管理似乎很头疼!我还认为async.apply
函数在加载时正在执行,所以如果我传递一个变量,它将在async.apply
执行时使用变量的值。
思考?我有async.switchboard
here的提案。哪个试图解决这个问题,但它不起作用。
答案 0 :(得分:0)
使用async.auto
可以很好地解决这个问题,它将函数的结果附加到链中的prop。
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);
对于承诺,请查看: