在我的代碼中,我有三個變量,它們的值依賴於外部函數調用,它們可以在任何時刻以任何順序設置爲true,因此它們更像標誌。異步等待條件得到滿足
我需要一個函數,只有一旦這三個變量設置爲true。
如何以異步的方式執行等待這三個變量爲真,而不會阻塞我的服務器?
(我不希望被refered到外部庫)
在我的代碼中,我有三個變量,它們的值依賴於外部函數調用,它們可以在任何時刻以任何順序設置爲true,因此它們更像標誌。異步等待條件得到滿足
我需要一個函數,只有一旦這三個變量設置爲true。
如何以異步的方式執行等待這三個變量爲真,而不會阻塞我的服務器?
(我不希望被refered到外部庫)
我一般喜歡用async庫做這樣的事情,但因爲你不希望被稱爲這個外部庫。我將編寫一個簡單的函數,以間隔檢查它是否已設置變量。
間隔檢查方法
var _flagCheck = setInterval(function() {
if (flag1 === true && flag2 === true && flag3 === true) {
clearInterval(_flagCheck);
theCallback(); // the function to run once all flags are true
}
}, 100); // interval set at 100 milliseconds
異步庫並行方法
var async = require('async');
async.parallel([
function(callback) {
// handle flag 1 processing
callback(null);
},
function(callback) {
// handle flag 2 processing
callback(null);
},
function(callback) {
// handle flag 3 processing
callback(null);
},
], function(err) {
// all tasks have completed, run any post-processing.
});
如果你控制這些變量的狀態 - 爲什麼不是你的時候觸發某些事件設置這個變量ES?更好 - 有一些對象包含這個邏輯。就像:
function StateChecker(callback) {
var obj = this;
['a', 'b', 'c'].forEach(function (variable) {
Object.defineProperty(obj, variable, {
get: function() { return a; }
set: function (v) { values[variable] = v; check(); }
});
});
function check() {
if (a && b && c) callback();
}
}
var checker = new StateChecker(function() {
console.log('all true');
});
checker.a = true;
checker.b = true;
checker.c = true;
> 'all true'
我在想這樣的事情,用get和set,然後我看到了你的答案:D。 –