[英]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.