>= 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)
时,我的承诺状态就被拒绝了
如果有人打电话给拒绝,那么承诺状态应该被拒绝,我是否正确?
答案 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
。处理函数 (onFulfilled
或onRejected
)然后被称为异步(尽快 因为堆栈是空的)。调用处理程序函数后, 如果处理程序功能是
- 返回一个值,
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
对象。