我希望函數cb只能在函數f1和f2完成後調用(請注意,f1和f2是異步的,它們可能隨時調用) 。只有在執行了其他異步功能後才調用函數
我試圖實現這樣的東西,但它似乎不是在node.js上這樣做的最好方法。
var l1 = false;
var l2 = false;
// function to be called after f1 and f2 have ended
function cb(err, res) {
if (err) {
console.log(err);
} else {
console.log('result = ' + res);
}
}
// f1 and f2 are practically identicals...
function f1(callback) {
console.log('f1 called');
l1 = true;
if (l2) {
console.log('f1 calling cb');
callback(null, 'one');
} else {
console.log('f2 wasn\'t called yet');
}
}
function f2(callback) {
console.log('f2 called');
l2 = true;
if (l1) {
console.log('f2 calling cb');
callback(null, 'two');
} else {
console.log('f1 wasn\'t called yet');
}
}
setTimeout(function() {
f1(cb); // will call cb
}, 3000);
setTimeout(function() {
f2(cb); // won't call cb
}, 1000);
// It will print:
// f2 called
// f1 wasn't called yet
// f1 called
// f1 calling cb
// result = one
使用承諾來實現這一點。 – Akhoy
你願意使用外部庫嗎?對於像這樣的場景以及許多其他場景,名爲[異步](https://github.com/caolan/async)的應用程序是非常受歡迎的。如果你說你願意,我會寫一個答案,解釋如何將它應用到這個特定的場景。 –
是的,的確,我一直在尋找一種使用外部庫的解決方案。我看着異步模塊,但找不到任何有用的東西。 – orangesky