繁体   English   中英

当Promise状态被拒绝或解决时

[英]When Promise state become rejected or resolved

 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)promise.then然后我得到的承诺状态拒绝。如果一个呼吁拒绝再答应状态应该拒绝不解决我是否正确?

你也可以像下面这样以“then-catch”方式处理Promises

 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)) 

该解决的承诺是不是当初的诺言,但返回的承诺, then 确实拒绝了原始承诺,您可以通过console.log(promise)验证。 但因为你被束缚then 它又回来了另一个承诺 ..

返回值 [ then ]

未决状态的Promise 然后异步调用处理函数( onFulfilledonRejected )(一旦堆栈为空)。 在调用处理函数之后,如果处理函数:

  • 返回一个值, then返回的promise将以返回值作为其值来解析;
  • 不返回任何内容, then返回的promise将以undefined解析 ;
  • 抛出一个错误,然后返回的promise被抛出错误作为其值被拒绝;

...

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

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

您发布的代码似乎在Chrome和Firefox上都能正常运行 - Promise按预期被拒绝。 reject功能标记无极作为拒绝-然后可以在该拒绝或者通过使一个回调函数到的第二个参数反应then或通过使用catch方法。 两种方法都是正确的。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM