在asynchronous比赛中使用第一个结果/获胜者将参加所有比赛

基本上,我想打两个asynchronous调用对方,只使用赢家。

我似乎无法弄清楚如何做到这一点,只有如何防止它。 这是远程可能的吗?

Lame伪代码:

//rigging a race function MysqlUser() { setTimeout(function(){ return "mysqluser"; }, 500); } function ADUser() { setTimeout(function(){ return "aduser"; }, 1000); } function getUser() { var user = null; user = ADBind(); user = MysqlBind(); //if user != null return user; //else? } 

我想(在这种情况下)为MysqlUser胜过ADUser。

任何帮助,将不胜感激。

您可以编写一个简单的first函数,该函数接受一个任务列表,然后仅返回第一个完成的结果:

 function first(tasks, cb) { var done = false; tasks.forEach(function(task) { task(function(result) { if(done) return; done = true; cb(result); }); }); } 

然后:

 function mysqlUser(cb) { setTimeout(function() { cb("mysqluser"); }, 500); } function adUser(cb) { setTimeout(function() { cb("aduser"); }, 1000); } first([mysqlUser, adUser], function(user) { console.log(user); }); 

这可能需要更多的思考,如果你想对付这两个操作失败。