我需要返回一个依赖于多个异步 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/