async.auto:第一个错误后停止整个链
我的印象是, async.auto
的行为是,如果其中一个任务返回一个err
,全局callback将被调用这个错误, 所有后续的任务将不会执行。 毕竟,他们为什么呢? 全局callback已被调用,所以错误已被报告。
事实certificate,只有依赖于错误任务的任务才会运行,其余部分将会运行。
'use strict'; var async = require('async'); async.auto({ downloadAudio: function (callback) { console.log("downloading audio..."); setTimeout(function () { console.log("downloaded audio."); callback(); }, 10000); }, downloadScript: function (callback) { console.log("downloading script..."); setTimeout(function () { return callback(new Error("ERROR downloading script!")); }, 1000); }, preprocessAudio: ['downloadAudio', function (callback) { console.log("preprocessing audio..."); setTimeout(function () { console.log("done preprocessing audio."); callback(); }, 5000); }] }, function (err) { if (err) { return console.error(err.message); } console.log('done.'); });
在这个代码片段中, downloadAudio
和downloadScript
将立即运行并且preprocessAudio
取决于downloadAudio
。 问题是,当downloadScript
返回一个err
, preprocessAudio
仍然会运行,即使没有意义,因为事情已经失败了:
downloading audio... downloading script... ERROR downloading script! downloaded audio. preprocessing audio... done preprocessing audio.
我知道,我可以使preprocessAudio
取决于downloadScript
也意味着preprocessAudio
将等待downloadScript
完成,即使他们可以并行运行没有问题。
有没有什么优雅的方法来解决这个问题?
谢谢,Jan
鉴于此,如果downloadScript已经返回错误,您不希望预处理audio运行,则预处理audio确实会“依赖”其他两个函数。
只需添加依赖关系,所有应该正常工作。
'use strict'; var async = require('async'); async.auto({ downloadAudio: function (callback) { console.log("downloading audio..."); setTimeout(function () { console.log("downloaded audio."); callback(); }, 10000); }, downloadScript: function (callback) { console.log("downloading script..."); setTimeout(function () { return callback(new Error("ERROR downloading script!")); }, 1000); }, preprocessAudio: ['downloadAudio', 'downloadScript', function (callback) { console.log("preprocessing audio..."); setTimeout(function () { console.log("done preprocessing audio."); callback(); }, 5000); }] }, function (err) { if (err) { return console.error(err.message); } console.log('done.'); });
- 在JavaScript中asynchronous迭代大量数组,而不会触发超出的堆栈大小
- 是否有可能build立一个dynamic的任务列表nodejsasynchronous(瀑布,系列等…)
- 节点MySQL以最快的速度执行多个查询
- 在node.js中依次运行多个asynchronous函数
- 我如何dynamic使用for循环,将不同的参数推送到一个数组?
- 在NodeJS中插入一个大型的csv文件,200,000行+到MongoDB中
- 我如何pipe理Node.jsasynchronousvariables作用域?
- 使用async.js进行asynchronous树遍历
- Mongooseasynchronous调用内循环与asynchronous库