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