asynchronous等待一个条件被满足

在我的代码中,我有三个variables,它们的值依赖于外部函数调用,它们可以在任何时候以任何顺序设置为true,所以它们更像标志。

我只需要一个函数,只要这三个variables设置为true。

我怎样才能以asynchronous的方式执行一个等待这三个variables为真,而不阻塞我的服务器?

(我不想被引用到外部库)

我通常喜欢使用asynchronous库来做这样的事情,但是因为你不想被引用到外部库。 我会写一个简单的函数来检查它是否已经被设置了。


间隔检查方法

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 

asynchronous库并行方法

 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. }); 

如果你控制这些variables的状态 – 为什么不设置这个variables时触发一些事件? 更好 – 有一些对象包含这个逻辑。 就像是:

 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'