当承诺状态被拒绝或解决时

时间:2018-11-14 11:45:52

标签: javascript ecmascript-6 promise es6-promise

>= 0

在上面的代码段中,即使我正在调用拒绝,但承诺状态也已解决,但是当我从let promise = new Promise(function(resolve, reject) { setTimeout(() => reject(new Error("Whoops!")), 1000); }); // reject runs the second function in .then promise.then( result => alert(result), // doesn't run error => alert(error) // shows "Error: Whoops!" after 1 second );中删除error => alert(error)时,我的承诺状态就被拒绝了 如果有人打电话给拒绝,那么承诺状态应该被拒绝,我是否正确?

4 个答案:

答案 0 :(得分:2)

您还可以按如下所示的“然后捕获”方式处理承诺

let promise = new Promise(function(resolve, reject) {
  setTimeout(() => reject('Error'));
});

promise
  .then(result => console.log('Result ', result)) 
  .catch(error => console.log('This is Error message -', error))

答案 1 :(得分:1)

已解决的承诺不是原始承诺,而是then返回的承诺。最初的承诺确实已被拒绝,您可以通过console.log(promise)进行验证。但是因为您链接了then it returns another promise ..

  

返回值(来自then]

     

状态为{strong>待审核的Promise。处理函数   (onFulfilledonRejected)然后被称为异步(尽快   因为堆栈是空的)。调用处理程序函数后,   如果处理程序功能是

     
      
  • 返回一个值,then返回的promise用   返回值作为其值;
  •   
  • 不返回任何内容,由then返回的承诺已解决,值为undefined
  •   
  • 抛出错误,然后返回的诺言将被抛出而被拒绝   错误是它的值;
  •   
     

...

第二点适用于您的情况。您可以通过观察来验证  Promise.reject().then(undefined, ()=>{})
返回使用undefined值解决的承诺。

答案 2 :(得分:0)

在您的情况下,承诺的最终状态也会被拒绝。 试试console.log(promise); 与error => alert(error)

无关

答案 3 :(得分:0)

您发布的代码似乎可以在Chrome和Firefox上正常使用-Promise被拒绝了。 reject函数将Promise标记为已拒绝-您可以通过将回调函数传递到then的第二个参数中或使用catch方法来对该拒绝作出反应。两种方法都是正确的。

如果遇到任何意外行为,请确认您没有使用某些有问题的polyfill来代替原始的Promise对象。

参考:Promise.prototype.thenPromise.prototype.catch