即使ajax调用是同步的,函数也会运行Async

时间:2019-01-07 21:44:20

标签: javascript jquery

我有一个函数,如果某个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”。

我们非常感谢您的协助。谢谢!

0 个答案:

没有答案