javascript - 使用异步 ajax 调用构建对象

标签 javascript jquery ajax asynchronous

我需要返回一个依赖于多个异步 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 调用设置为同步,它就可以工作;但我想避免这种情况。

最佳答案

您可以在异步函数场景中使用 Promise 或回调

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

关于javascript - 使用异步 ajax 调用构建对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47703134/

相关文章:

javascript - 令人困惑的逻辑运算 if(null)

Javascript将多行字符串拆分为对象

javascript - 使用 Easy Slider 1.7 单击下一步按钮后的连续动画

jquery - SmoothScroll 不适用于表格导航

javascript - jQuery .getJSON 失败,语法错误?

jQuery 屏蔽输入插件无法在智能手机上运行

javascript - Mootools 1.4.5 请求 'encoding' 选项不起作用

javascript - 在javascript问题中读取xml

javascript - 在 Spotify 应用程序中访问用户数据

ajax - Node.js Web 应用程序需要什么架构?