Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用async/await查找cors请求的值?_Javascript_Jquery_Asynchronous_Async Await - Fatal编程技术网

Javascript 使用async/await查找cors请求的值?

Javascript 使用async/await查找cors请求的值?,javascript,jquery,asynchronous,async-await,Javascript,Jquery,Asynchronous,Async Await,我试图执行一个CORS请求,然后使用async/await从中获取值。顺便说一句,我使用的是jquery 我相信createCORSRequest和executeCORSRequest这两个函数都工作得很好,所以实现并不重要。函数getDailyGames使用wait接收从executeCORSRequest创建的承诺,然后返回该承诺 我的问题是在$document.ready函数中实际使用承诺这基本上是jquery中的主要函数 在注释行中,'.then'方法用于getDailyGames的结果

我试图执行一个CORS请求,然后使用async/await从中获取值。顺便说一句,我使用的是jquery

我相信createCORSRequest和executeCORSRequest这两个函数都工作得很好,所以实现并不重要。函数getDailyGames使用wait接收从executeCORSRequest创建的承诺,然后返回该承诺

我的问题是在$document.ready函数中实际使用承诺这基本上是jquery中的主要函数

在注释行中,'.then'方法用于getDailyGames的结果,以打印出该函数的结果,该函数工作正常

然而,我想将这个承诺的值存储在'result'变量中,并对其进行处理,但我无法从承诺中获得它

我如何正确地返回这个承诺,以便将解析后的值存储在变量中并处理它

或者用另一种方式问:为什么getDailyGames中的“result”变量得到承诺?不应该使用wait和promise直接给你解析值吗

$(document).ready(function() {    
  //getDailyGames(20190313).then(result => console.log(result));
  let result = getDailyGames(20190313);
  //DO STUFF WITH RESULT    
});

async function getDailyGames(date){    
  const url = 'https://api.jjjacobson.com/dailygames?season=2018-2019- 
  regular&date=' + date;
  let result = await executeCORSRequest(url);
  return result;    
}

function executeCORSRequest(url){
  return new Promise(function(resolve, reject) {
    const xhr = createCORSRequest('GET', url);
      if (!xhr) {
        throw new Error('CORS not supported');
      }
      xhr.onload = function() {
        resolve(xhr.responseText);
      };  

      xhr.onerror = function() {
        console.log('There was an error!');
        reject('ERROR');
      };    
      xhr.send();
    });
}

function createCORSRequest(method, url) {
  let xhr = new XMLHttpRequest();
  if ("withCredentials" in xhr) {    
    // Check if the XMLHttpRequest object has a "withCredentials" property.
    // "withCredentials" only exists on XMLHTTPRequest2 objects.
    xhr.open(method, url, true);    
  } 
  else if (typeof XDomainRequest != "undefined") {    
    // Otherwise, check if XDomainRequest.
    // XDomainRequest only exists in IE, and is IE's way of making CORS requests.
    xhr = new XDomainRequest();
    xhr.open(method, url);    
  } 
  else {    
    // Otherwise, CORS is not supported by the browser.
    xhr = null;    
  }
  return xhr;
}

您应该将document.ready函数更改为:

$(document).ready(function() {

  let result;
  getDailyGames(20190313).then(res => {
    result = res;
    //DO STUFF WITH RESULT

  });
});
wait仅在函数本身是异步的情况下工作。你也可以这样做

$(document).ready(async function() {

  let result = await getDailyGames(20190313);
  //DO STUFF WITH RESULT

});

您应该将document.ready函数更改为:

$(document).ready(function() {

  let result;
  getDailyGames(20190313).then(res => {
    result = res;
    //DO STUFF WITH RESULT

  });
});
wait仅在函数本身是异步的情况下工作。你也可以这样做

$(document).ready(async function() {

  let result = await getDailyGames(20190313);
  //DO STUFF WITH RESULT

});

Async/await是唯一旨在消除回调地狱的语法糖。应该清楚地记住,在异步链的某个地方,您必须处理承诺。这就是为什么只能在异步函数中使用wait的原因,遗憾的是,脚本的根不是异步函数


在您的情况下,如果要序列化对getDailyGames的调用,请将document.ready设置为一个异步函数,如@varun所示。

async/await是唯一旨在消除回调地狱的语法糖。应该清楚地记住,在异步链的某个地方,您必须处理承诺。这就是为什么只能在异步函数中使用wait的原因,遗憾的是,脚本的根不是异步函数

在您的情况下,如果要序列化对getDailyGames的调用,请将document.ready设置为一个异步函数,如@varun所示