2013-05-30 18 views
1

基本上,我想對彼此進行兩次異步調用,並且只使用獲勝者。在異步比賽中使用第一個結果/ Winner需要所有的比賽

我似乎無法弄清楚如何做到這一點,只有如何防止它。這是遠程可能的嗎?

拉梅僞代碼:

//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便有勝出。

任何幫助,將不勝感激。

回答

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

這可能需要一些如果你想對付這兩種操作失敗,那麼更多的想法。