0
我是相當新的節點,並有一些麻煩解開一些回調地獄。我需要執行一系列涉及的操作 - 每個操作都有很多模塊中的很多回調代碼。但是這些操作需要串聯執行。我打破了這個玩具程序的真正混亂:使用異步序列化操作與節點js中的多個回調層
const
a = require('async');
var myasyncproc = function(cb) {
setTimeout(console.log('..boo') , 10000);
var str = require('fs').createReadStream('atest.js');
str.on('data', function(data) {
console.log(data);
})
str.on('end', function() {
cb();
});
};
[1,2,3].forEach(function(i) {
a.series([
function(callback) {
console.log('starting ');
myasyncproc(callback);
},
function(callback) {
console.log('too');
callback(null, 'too');
},
function(callback) {
console.log('tree');
callback(null, 'done');
}
], function (err, result) {
console.log(result);
}
);
});
另外請注意,我需要執行此係列多次。在這裏,我剛剛使用了向量[1,2,3],但在我的實際應用中,這些值有我需要使用的值。如果你運行這個,你會看到myasyncproc在「too」和「tree」運行之前被調用了三次(開始)。
這很好,但是如何使用異步或其他技術來阻止秒調用myasyncproc直到'樹'完成?看起來像異步應該這樣做,但我不能完全吻出來...
謝謝!
使用承諾 - 現在它有點成爲ecmascript控制流的標準。藍鳥是最快的實現 - https://github.com/petkaantonov/bluebird – alexpods
由於您已經在使用'async'庫,請查看'async.forEachSeries'。 –