色婷婷狠狠18禁久久YY,CHINESE性内射高清国产,国产女人18毛片水真多1,国产AV在线观看

在JavaScript中使用setTimeout()拒絕承諾時出現(xiàn)unccatch(In Promise)錯誤

吉茹定1年前7瀏覽0評論

我正在學習javascript中的承諾,我決定實現(xiàn)一個簡單的承諾,我將設置一個3秒的超時,然后拒絕這個承諾。在拒絕它時,我捕捉到了錯誤并將其顯示在HTML元素中。promise完美地工作并顯示消息,但是我在控制臺中得到以下錯誤。

Uncaught (in promise) I hate you
Promise.then (async)        
(anonymous)

以下是代碼供您參考-

const myPromise = new Promise(function(myResolve, reject) {
setTimeout(() => {
    reject('I hate you');
}, 3000);
});

myPromise.then(function(value) {
  document.getElementById("demo").innerHTML = value;
});

myPromise.catch( error => {
    console.log("Catching it");
    document.getElementById("demo").innerHTML = error;
});

<h2>JavaScript Promise</h2>
<p>Wait 3 seconds (3000 milliseconds) for this page to change.</p>
<h1 id="demo"></h1>

您需要在之后捕捉錯誤。然后

這應該行得通

<html>

<body>

  <h2>JavaScript Promise</h2>

  <p>Wait 3 seconds (3000 milliseconds) for this page to change.</p>

  <h1 id="demo"></h1>

  <script>
    const myPromise = new Promise(function(myResolve, reject) {
      setTimeout(() => {
        reject('I hate you');
      }, 3000);
    });

    myPromise.then(function(value) {
      document.getElementById("demo").innerHTML = value;
    }).catch(error => {
      console.log("Catching it");
      document.getElementById("demo").innerHTML = error;
    });
  </script>

</body>

</html>

更新

感謝tlvi38對已接受答案的評論,我現(xiàn)在理解了我的疑問,OP發(fā)布的原始問題中未捕獲的問題可以通過為unchained then返回的新承諾添加單獨的catch塊來修復,如下所示:

const myPromise = new Promise(function (myResolve, reject) {
  setTimeout(() => {
    reject("I hate you");
  }, 500);
});

const newUncaughtPromise = myPromise.then(function (value) {
  document.getElementById("demo").innerHTML = value;
});

myPromise.catch((error) => {
  console.log("Catching it");
  document.getElementById("demo").innerHTML = error;
});

newUncaughtPromise.catch((error) => {
  console.log("Catching the uncaught it");
  document.getElementById("demo_uncaught").innerHTML = error;
});

原創(chuàng) 因為我不能添加評論,所以我寫這篇文章作為回答,但是我觀察到除了可接受的回答之外,如果你有像下面這樣的catch塊,它也可以工作,沒有任何問題。

const myPromise = new Promise(function(myResolve, reject) {
  setTimeout(() => {
    reject('I hate you');
  }, 3000);
});
  
myPromise.catch( error => {
  console.log("Catching it");
  document.getElementById("demo").innerHTML = error;
});

但是如果兩者都有,那么和catch沒有以任何順序鏈接起來,就會產(chǎn)生無法捕獲的錯誤..在控制臺中。有人能解釋一下為什么嗎?