我有一个函数,如果某个ID将是可见的,则会调用该函数。此函数调用我将async设置为false的jQuery AJAX调用。我在控制台日志中收到了不赞成使用的警告,因此告诉我这是一个同步调用。我传回了回调函数,但在下面的示例中,它不等待我的回调完成才运行控制台日志。关于为什么我的调用sync的函数被异步运行的想法?不幸的是,我无法在代码中使用任何ES6或ES7方法。
if (fsReturned[0].id === 'the-id') {
// sync call with callback
keyCheck('key', function (resObj) {
console.log('precheck active key = ' + resObj.activeKey);
if (elResponse.activeKey === '1') {
fsReturned = $('#id');
} else {
fsReturned = $('#id').next();
}
});
console.log('This runs before my callback function finishes');
}
function sendSyncRequest(requestData, url, successFunction, authKey, method) {
header = {
"Authorization": "Bearer " + authKey,
"Content-Type": "application/json"
}
requestParameters = {
url: url,
method: method,
crossDomain: true,
headers: header,
async: false,
data: JSON.stringify(requestData)
}
$.ajax(requestParameters).then(
function (response, statusText, xhr) {
// successful calls
successFunction(response);
},
function (xhr) {
// api failures
successFunction(null);
});
}
function keyCheck(elValue, callback) {
var url = 'url',
stageKey = 'key',
requestData = {
activity: 'something',
el: elValue
};
successFunction = function (response) {
// processed response and created elResObj object
var processed = JSON.parse(response);
var elResObj = {
activeKey: processed.activeKey,
};
return callback(elResObj);
};
sendSyncRequest(requestData, url, successFunction, stageKey, 'POST');
};
在继续其余代码之前,我需要使用从同步调用中获取的数据更新全局变量“ fsReturned”。
我们非常感谢您的协助。谢谢!