2011-08-24 77 views
1

這是我的代碼。如何在事件驅動編程中找到執行結束

db.query(str, arr, function selectCb(error, results, fields) { 
     if (error) { 
      return proceed(false, {errno:'010',message:error.message}, request); 
     } 
     for (var i=0; i<results.length; i++) { 
      // add the gib infor 
      if (results[i].refertype=='G') { 
       var input={}; 
       input.fields="*"; 
       input.gibname=results[i].refername; 
       gib.getgibinternal(input, makeCallback(i)); 
       function makeCallback(index) { 
        return function(gresult) { 
         results[index].gib=gresult.data[0]; 
         if (index==results.length-1) { 
          // becuase problem was comint in yapi enterothers it give onlye one result of gib 
          return proceed(true, results, request); 
         } 
        } 
       } 
       // add the user info   
      } else if(results[i].refertype=='U') { 
       var input={}; 
       input.username=results[i].refername; 
       input.fields="*"; 
       user.getuserinternal(input, makeCallbackuser(i)); 
       function makeCallbackuser(index) { 
        return function(gresult) { 
         results[index].user=gresult.data[0]; 
         if(index==results.length-1) { 
          return proceed(true, results, request); 
         } 
        } 
       } 
      } 
     } 
     if (results.length==0) { 
      return proceed(true, results, request); 
     } 

    }); 
}); 

在這段代碼的問題是,當我有5個記錄所有refertype G和5記錄refertype的則U此函數返回不等待用戶數據來。

假設返回類型G是最後一次,並且用戶數據來自服務器遲到,所以當最後一個G到達時,它返回時沒有用戶數據。 我想要的是執行所有的查詢然後返回值,我該怎麼做?

我如何等待用戶數據來?

回答

0

像async這樣的庫(https://github.com/caolan/async)對這類事情有幫助。查看這些文檔,因爲它們顯示了一些不同的場景示例。

+1

請建議我可以從異步庫使用的功能 – XMen