Javascript 异步&;使用参数等待(回调)

Javascript 异步&;使用参数等待(回调),javascript,Javascript,我在W3Schools.com()中找到了我的代码片段。它工作正常,但根据承诺语法,如果出现故障(错误),我们必须使用myReject。我已从myResolve更改为myReject。它没有起作用。重点是什么 异步函数getFile(){ 让我承诺=新承诺(函数(myResolve,myReject){ 让req=newXMLHttpRequest(); 请求打开('GET','mycar.html'); req.onload=函数(){ 如果(请求状态==200){ myResolve(请求

我在W3Schools.com()中找到了我的代码片段。它工作正常,但根据承诺语法,如果出现故障(错误),我们必须使用myReject。我已从myResolve更改为myReject。它没有起作用。重点是什么

异步函数getFile(){ 让我承诺=新承诺(函数(myResolve,myReject){ 让req=newXMLHttpRequest(); 请求打开('GET','mycar.html'); req.onload=函数(){ 如果(请求状态==200){ myResolve(请求响应); }否则{ myResolve(“未找到文件”);//应该是myReject。 } }; 请求发送(); }); document.getElementById(“demo”).innerHTML=等待我的承诺; }
getFile()首先,您需要拒绝您的承诺,以防找不到您已经知道如何做的文件。现在,被拒绝的承诺是一个例外,我们需要在这里处理

async function getFile() {
  let myPromise = new Promise(function(myResolve, myReject) {
    let req = new XMLHttpRequest();
    req.open('GET', "mycar.html");
    req.onload = function() {
      if (req.status == 200) {
        myResolve(req.response);
      } else {
        myReject("File not Found");
      }
    };
    req.send();
  });
  try{
     document.getElementById("demo").innerHTML = await myPromise;
  } catch(e){
     document.getElementById("demo").innerHTML = "I got an error" ;
  }
}

getFile();

首先,你们需要拒绝你们的承诺,以防并没有找到你们已经知道怎么做的文件。现在,被拒绝的承诺是一个例外,我们需要在这里处理

async function getFile() {
  let myPromise = new Promise(function(myResolve, myReject) {
    let req = new XMLHttpRequest();
    req.open('GET', "mycar.html");
    req.onload = function() {
      if (req.status == 200) {
        myResolve(req.response);
      } else {
        myReject("File not Found");
      }
    };
    req.send();
  });
  try{
     document.getElementById("demo").innerHTML = await myPromise;
  } catch(e){
     document.getElementById("demo").innerHTML = "I got an error" ;
  }
}

getFile();

首先,在这种情况下,错误可能不同于文件
未找到
(状态代码为
404
)。看一看。此外,您需要一种将成功案例与错误案例分开的方法,这就是为什么您可以使用它。在您的情况下,您可以使用
reject
,但是在调用
getFile()
时,应该使用
.catch()
来处理错误


首先,在这种情况下,错误可能不同于文件
未找到
(状态代码为
404
)。看一看。此外,您需要一种将成功案例与错误案例分开的方法,这就是为什么您可以使用它。在您的情况下,您可以使用
reject
,但是在调用
getFile()
时,应该使用
.catch()
来处理错误

承诺拒绝(在本例中,
myReject
)类似于在函数中抛出错误

wait
基本上是调用承诺并等待响应

要捕获错误,我们可以对异步/等待函数使用
try…catch
块:

async function getFile() {
  let myPromise = new Promise(function(myResolve, myReject) {
    let req = new XMLHttpRequest();
    req.open('GET', "mycar.html");
    req.onload = function() {
      if (req.status === 200) {
       myResolve(req.response);
      } else {
        myReject("File not Found"); //Changed to myReject.
      }
    };
    req.send();
  });
  try {
    const response = await myPromise;
    document.getElementById("demo").innerHTML = response;
  }
  catch(error){
    document.getElementById("demo").innerHTML = "An error occurred: " + error;
  }
}
getFile();
此外,您可以调用re-write代码,让
getFile
处理错误:

async function getFile() {
  let myPromise = new Promise(function(myResolve, myReject) {
    let req = new XMLHttpRequest();
    req.open('GET', "mycar.html");
    req.onload = function() {
      if (req.status === 200) {
       myResolve(req.response);
      } else {
        myReject("File not Found"); //Changed to myReject.
      }
    };
    req.send();
  });
  return await myPromise;
}
getFile().then(function(response){
  document.getElementById("demo").innerHTML = response;
}).catch(function(error){
  document.getElementById("demo").innerHTML = "An error occurred: " + error;
});
有关异步/等待的更多信息:

另外,正如Francesco Lisandro所说:服务器可以返回不同的OK响应,而不是
200

为简单起见,我们当然可以使用
req.status
,但我们也可以使用
req.statusText
,如果响应正常,它会给我们“OK”。

承诺拒绝(在这种情况下,
myReject
)就像在函数中抛出错误一样

wait
基本上是调用承诺并等待响应

要捕获错误,我们可以对异步/等待函数使用
try…catch
块:

async function getFile() {
  let myPromise = new Promise(function(myResolve, myReject) {
    let req = new XMLHttpRequest();
    req.open('GET', "mycar.html");
    req.onload = function() {
      if (req.status === 200) {
       myResolve(req.response);
      } else {
        myReject("File not Found"); //Changed to myReject.
      }
    };
    req.send();
  });
  try {
    const response = await myPromise;
    document.getElementById("demo").innerHTML = response;
  }
  catch(error){
    document.getElementById("demo").innerHTML = "An error occurred: " + error;
  }
}
getFile();
此外,您可以调用re-write代码,让
getFile
处理错误:

async function getFile() {
  let myPromise = new Promise(function(myResolve, myReject) {
    let req = new XMLHttpRequest();
    req.open('GET', "mycar.html");
    req.onload = function() {
      if (req.status === 200) {
       myResolve(req.response);
      } else {
        myReject("File not Found"); //Changed to myReject.
      }
    };
    req.send();
  });
  return await myPromise;
}
getFile().then(function(response){
  document.getElementById("demo").innerHTML = response;
}).catch(function(error){
  document.getElementById("demo").innerHTML = "An error occurred: " + error;
});
有关异步/等待的更多信息:

另外,正如Francesco Lisandro所说:服务器可以返回不同的OK响应,而不是
200


为了简单起见,我们当然可以使用
req.status
,但我们也可以使用
req.statusText
,如果响应正常,它应该会给我们“OK”。

它没有起作用。什么不起作用?为什么不使用
fetch
?您期望的是什么以及实际发生的是什么?拒绝返回带有null的承诺,当出现错误时,您应该捕获您拒绝的错误myReject以承诺语法生成错误消息。在此代码段中,使用的是“myResolve(“未找到文件”);”。它的工作很好。但我尝试将其更改为“myReject(“未找到文件”);”,它不会生成错误消息。为什么不起作用?@Dariona恰恰相反,带有两个myResolve的代码实际上将错误视为成功,这并不好,在这一点上,它并不比直接在
Promise
正文中编写那些
innerHTML
行更好(可能更糟)。它没有起作用。什么不起作用?为什么不使用
fetch
?您期望的是什么以及实际发生的是什么?拒绝返回带有null的承诺,当出现错误时,您应该捕获您拒绝的错误myReject以承诺语法生成错误消息。在此代码段中,使用的是“myResolve(“未找到文件”);”。它的工作很好。但我尝试将其更改为“myReject(“未找到文件”);”,它不会生成错误消息。为什么不起作用?@darionas恰恰相反,带有两个myResolve的代码实际上将错误视为成功,这并不好,在这一点上也不好(可能更糟)而不是直接在
Promise
body中编写
innerHTML
行。谢谢大家。更喜欢javascript代码中的三重相等checking@Shikamu是的,也是这样。我只是复制粘贴代码,但我可以随时编辑它。有趣的是,我偶然发现了某人的答案,看到了,也想到了。IDK为什么我当时没有编辑我的,IG我忘了。在javascript代码中选择三重相等表示相等checking@Shikamu是的,也是这样。我只是复制粘贴代码,但我可以随时编辑它。有趣的是,我偶然发现了某人的答案,看到了,也想到了。IDK为什么我没有编辑我的,IG我只是忘了。