簡體   English   中英

使用異步Ajax調用構建對象

[英]Building an object using async ajax calls

我需要返回一個依賴多個異步jquery 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調用設置為synchronous,則它可以工作; 但我想避免這種情況。

您可以針對異步功能的場景使用Promises或回調

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM