Node.js 在异步比赛/赢家通吃比赛中使用第一个结果
基本上,我想让两个异步调用相互对立,并且只使用获胜者 我似乎不知道怎么做,只知道如何预防。有可能吗 Lame伪代码:Node.js 在异步比赛/赢家通吃比赛中使用第一个结果,node.js,asynchronous,race-condition,Node.js,Asynchronous,Race Condition,基本上,我想让两个异步调用相互对立,并且只使用获胜者 我似乎不知道怎么做,只知道如何预防。有可能吗 Lame伪代码: //rigging a race function MysqlUser() { setTimeout(function(){ return "mysqluser"; }, 500); } function ADUser() { setTimeout(function(){
//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);
});
});
}
然后:
如果您想处理两个操作都失败的问题,可能需要更多的考虑。您可以编写一个简单的
first
函数,该函数接受一个任务列表,并返回第一个完成的任务的结果:
function first(tasks, cb) {
var done = false;
tasks.forEach(function(task) {
task(function(result) {
if(done) return;
done = true;
cb(result);
});
});
}
然后:
如果您想处理这两个失败的操作,可能需要更多的思考