我正在使用異步庫(瀏覽器版本)。當我將異步調用嵌套到另一個異步調用中時,我被卡在正常狀態(讀取'預期')行爲async series的地步。在Javascript中導致錯誤行爲的多個Async系列
這裏有一些小提琴製作輸出錯誤
的問題在這裏
總結隨着代碼如下
$(函數(){
async.series([
function f1(cb) {
setTimeout(function() {
console.log("Hello from f1");
cb(null);
}, 3000);
async.series([
function f11(cb) {
setTimeout(function() {
console.log("Hello from f11");
cb(null);
}, 3000);
}, function f12(cb) {
setTimeout(function() {
console.log("Hello from f12");
cb(null);
}, 3000);
}, function f13(cb) {
setTimeout(function() {
console.log("Hello from f13");
cb(null);
}, 3000);
}], function (err, res) {
console.log("Done all in f1");
});
}, function f2(cb) {
setTimeout(function() {
console.log("Hello from f2");
cb(null);
}, 3000);
}],
function (err, res) {
console.log("Done all");
});
});
我所期望的輸出如下
Hello from f1
Hello from f11
Hello from f12
Hello from f13
Done all in f1
Hello from f2
Done all
但我得到這個 -
Hello from f1
Hello from f11
Hello from f2
Done all
Hello from f12
Hello from f13
Done all in f1
你看,我看這個問題?我認爲async.series會因爲同時運行多個異步系列而感到困惑。如果是這種情況,我怎樣才能將嵌套管道嵌入主管中。任何人都可以幫忙@Colaola
答案來自@tom的編輯。在代碼早期調用cb(null)是錯誤的 -
$(function() {
async.series([
function f1(cb) {
setTimeout(function() {
console.log("Hello from f1");
}, 3000);
async.series([
function f11(cb1) {
setTimeout(function() {
console.log("Hello from f11");
cb1(null);
}, 3000);
}, function f12(cb1) {
setTimeout(function() {
console.log("Hello from f12");
cb1(null);
}, 3000);
}, function f13(cb1) {
setTimeout(function() {
console.log("Hello from f13");
cb1(null);
}, 3000);
}], function (err, res) {
console.log("Done all in f1");
cb(null);
});
}, function f2(cb) {
setTimeout(function() {
console.log("Hello from f2");
cb(null);
}, 3000);
}],
function (err, res) {
console.log("Done all");
});
});
是的,這是正確的。爲了簡化問題,我做了一些編輯。這使得這個問題失去了它的肉。 – saurshaz
感謝您的回答。請看小提琴也。我正在編輯問題反映我的意思。 – saurshaz
請參閱編輯的問題。我的問題是在不同的背景下。現在更清楚了。 – saurshaz