Как запустить одну асинхронную функцию после завершения второй?
У меня проблема с двумя функциями. я хочу chcekResults
бегать только когда callAPI
закончен.
Мое событие клика:
$("a#showA").click(function (e) {
e.preventDefault();
chceckResults(callAPI(apiKey));
});
и функции:
var Count = 0;
var ContractsArray = new Array();
function callAPI(yourAPIKey){
var enquiry = URL + yourAPIKey;
//alert(enquiry);
$.ajax({
url: enquiry,
type: 'GET',
dataType: "jsonp",
jsonp: "callback",
jsonpCallback: "jsonpCallback2",
complete: function (response, responseCode) {
},
success: function (json) {
$.each(json.Contracts, function (index, contract) {
// alert("Count before increament : " + Count);
// alert(contract.ContractCode);
ContractsArray[Count] = contract.ContractCode;
// alert("Count after increament : " + Count);
// alert("ContractsArray[Count]: " + ContractsArray[Count]);
Count++;
});
}
});
}
function chceckResults(){
alert("Count value in chceckResults : " + Count);
for(var i = 0; i <= Count; i++){
alert("ContractsArray[" + i + "]: " + ContractsArray[i]);
}
}
я хочу chcekResults
бегать только когда callAPI
закончен. Как я могу это сделать?
3 ответа
Вы хотите, чтобы chcekResults запускался после завершения callAPI, есть несколько возможностей, он запускается после того, как callAPI успешен (я полагаю, это то, что вы действительно хотели), или callAPI завершился неудачно, или оба.
Так как callAPI выполняет вызов ajax, вы можете поместить chcekResults в успешный обратный вызов ajax.
Такой что:
$.ajax({
url: enquiry,
type: 'GET',
dataType: "jsonp",
jsonp: "callback",
jsonpCallback: "jsonpCallback2",
complete: function (response, responseCode) {
},
success: function (json) {
$.each(json.Contracts, function (index, contract) {
// alert("Count before increament : " + Count);
// alert(contract.ContractCode);
ContractsArray[Count] = contract.ContractCode;
// alert("Count after increament : " + Count);
// alert("ContractsArray[Count]: " + ContractsArray[Count]);
Count++;
});
// --------------------- Edit Begins -------------------------
chcekResults(...); // This is run after ajax response returns.
// --------------------- Edit Ends -------------------------
}
});
Это быстрый способ сделать это, если вы хотите сделать его более универсальным, вы можете передать chcekResults в качестве обратного вызова ajax, так что, если этот обратный вызов определен, запустите его, если нет, игнорируйте. Таким образом, вы можете использовать этот ajax с или без обратного вызова.
Просто позвони chceckResults
функция изнутри callAPI
Обработчик успеха:
success: function (json) {
chceckResults();
$.each(json.Contracts, function (index, contract) {
ContractsArray[Count] = contract.ContractCode;
Count++;
});
}
Вызов checkResult
в вашем callAPI
success
Перезвоните.Success
вызывается после того, как функция вернулась.