2011-08-24 2 views
1

다음은 내 코드입니다. 내가 사용자 데이터가 오기를 U는이 함수가 대기없이 반환 된 모든 refertype G의 5 개 기록과 refertype 5 기록을 데 때이벤트 구동 프로그래밍에서 실행 종료를 찾는 방법

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

    }); 
}); 

이 코드의 문제입니다.

마지막으로 refeter 유형 G가 있고 사용자 데이터가 서버에서 늦게 오는 경우 최종 G가 도착하면 사용자 데이터없이 반환됩니다. 내가 원하는 것은 모든 쿼리를 실행 한 다음 값을 반환하는 것입니다. 어떻게하면됩니까?

어떻게 사용자 데이터가 올 때까지 기다릴 수 있습니까?

답변

0

async (https://github.com/caolan/async)와 같은 라이브러리에는 이런 종류의 도움이됩니다. 몇 가지 시나리오 예가 나와있는 문서를 확인하십시오.

+1

Pls가 비동기 라이브러리에서 사용할 수있는 기능을 제안합니다. – XMen

관련 문제