MYYA
var Callback = function(keys, callback) { keys = [].concat(keys); var value; this.value = function(v) { if (v === undefined) { return value; } value = v; }; this.emit = function(key) { var i = keys.indexOf(key); if (i>=0) { keys.splice(i, 1); if (keys.length<=0) { callback(value); } } };};var c= new Callback(['test1', 'test2'], console.log);setTimeout(function() { c.value(1); c.emit('test1');},100);setTimeout(function() { c.emit('test2');},101);