首页 > 解决方案 > 即使 ajax 调用是同步的,函数也会运行异步

问题描述

如果某个 id 将是可见的,我有一个调用的函数。此函数调用我已将 async 设置为 false 的 jQuery AJAX 调用。我在控制台日志中收到不推荐使用的警告,这告诉我这是一个同步调用。我传回了回调函数,但它并没有等待我的回调完成,然后才运行下面示例中的控制台日志。关于为什么我的调用同步调用的函数是异步运行的想法?不幸的是,我不能在我的代码中使用任何 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”。

非常感谢任何帮助。谢谢!

标签: javascriptjquery

解决方案


推荐阅读