2017-12-07 6 views
0

여러 비동기 jquery ajax 호출에 의존하는 사용자 정의 객체를 반환해야합니다. 아래async ajax 호출을 사용하여 객체 만들기

샘플 코드 :

function BuildMyObject() { 
    var bp = null; 
    var accountId = getAccountId(); 
    var signature = getSignature(); 
    var transactionType = getTransactionType(); 
    var mode = getMode(); 
    var merchantIdentifier = getMerchantIdentifier(); 
    jQuery.when(accountId, signature, transactionType, mode, merchantIdentifier).done(function(rAcctId, 
     rSig, 
     rTransType, 
     rMode, 
     rMerchId) { 
     bp = new MyObject(
      rAcctId[0], 
      rSig[0], 
      rTransType[0], 
      rMode[0], 
      rMerchId[0]); 
    }); 
    return bp; 
} 

지금,이 null을 반환; 비동기 호출이 끝나기 전에 return 문이 시작됩니다. 객체를 반환하기 전에 모든 호출이 끝날 때까지 기다릴 수있는 방법이 있습니까? 내가 ajax 호출을 동시성으로 설정하면 작동합니다. 하지만 나는 그것을 피하고 싶습니다.

+1

간단히'약속의 예를 들어 jQuery.when (..)' –

답변

2

당신이 비동기 기능

//callback example 
 
function BuildMyObject(callback) { 
 
    var bp = null; 
 
    var accountId = getAccountId(); 
 
    var signature = getSignature(); 
 
    var transactionType = getTransactionType(); 
 
    var mode = getMode(); 
 
    var merchantIdentifier = getMerchantIdentifier(); 
 
    jQuery.when(accountId, signature, transactionType, mode, merchantIdentifier).done(function(rAcctId, 
 
     rSig, 
 
     rTransType, 
 
     rMode, 
 
     rMerchId) { 
 
     bp = new MyObject(
 
      rAcctId[0], 
 
      rSig[0], 
 
      rTransType[0], 
 
      rMode[0], 
 
      rMerchId[0]); 
 
      ) 
 
     callback(bp) 
 
      
 
    }); 
 
    
 
} 
 

 

 
//or with promise 
 

 
function BuildMyObject() { 
 
    return new Promise((resolve,reject) =>{ 
 
     var bp = null; 
 
     var accountId = getAccountId(); 
 
     var signature = getSignature(); 
 
     var transactionType = getTransactionType(); 
 
     var mode = getMode(); 
 
     var merchantIdentifier = getMerchantIdentifier(); 
 
     jQuery.when(accountId, signature, transactionType, mode, merchantIdentifier).done(function(rAcctId, 
 
      rSig, 
 
      rTransType, 
 
      rMode, 
 
      rMerchId) { 
 
      bp = new MyObject(
 
       rAcctId[0], 
 
       rSig[0], 
 
       rTransType[0], 
 
       rMode[0], 
 
       rMerchId[0]); 
 
      ) 
 
      resolve(bp) 
 
     }); 
 

 
    }) 
 
    
 
    
 
} 
 

 
BuildMyObject() 
 
.then((bp) =>{ 
 
    //do somthing with bp 
 
})
의 시나리오에 대한 약속이나 콜백 작업 할 수

+0

를 반환, 당신은 그냥 반환 할 수' bp'를'.done' 콜백에 넣고 체인을 리턴합니다. 예 : promise 생성자에서 전체를 래핑하는 대신'return jQuery.when (...). done (...)'을 사용한다. – CaseyWebb

+0

@amit; 약속 옵션은 작동 할 수있는 것처럼 보입니다. 하지만 어떻게하면 BP 개체를 다시 얻을 수 있습니까? 지금은 약속 객체를 반환하는 것처럼 보입니다. 내가 조립 된 bp 객체를 원할 때 –

+0

@JimB 나는 나의 대답을 편집하면 어떻게하면 bp를 얻을 수 있는지 알 수있다. –