我需要返回一个依赖于多个异步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调用设置为同步,它可以工作;但我想避免这种情况。
答案 0 :(得分:2)
您可以使用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
})