繁体   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