基本上,我想对彼此进行两次异步调用,只使用获胜者。
我似乎无法弄清楚如何做到这一点,只是如何防止它。可以远程进行吗?
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。
任何帮助都将不胜感激。
答案 0 :(得分:1)
你可以编写一个简单的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);
});
如果您想要应对两种操作失败,可能需要更多考虑。