承诺捕获行为

时间:2016-03-02 15:15:05

标签: javascript promise ecmascript-6 es6-promise

似乎以下工作没有抛出错误:

var p = new Promise (function (resolve, reject) {
    window.setTimeout(function() {
        reject('ko');
    }, 1000);
});

p.then(function (value) { console.log(value); })
.catch(function () { console.log('catched'); });
// → 'catched'

但这会引发错误:

var p = new Promise (function (resolve, reject) {
    window.setTimeout(function() {
        p.catch(function () { console.log('catched'); });
        reject('ko');
    }, 1000);
});

p.then(function (value) { console.log(value); });
// → 'catched'
// Uncaught (in promise) ko

为什么会有任何猜测?

1 个答案:

答案 0 :(得分:1)

必须在.catch之后直接链接.then。即使你这样写,它仍然会报告未被捕获:



var p = new Promise(function(resolve, reject) {
  window.setTimeout(function() {
    //p.catch(function () { console.log('catched'); });
    console.log(p)
    reject('ko');
  }, 1000);
});

p.then(function(value) {
  console.log(value);
});
p.catch(function() {
  console.log('catched');
});




这样做的原因是,如果您不这样链接,.catch函数就不会收到您致电.then时生成的返回值