Javascript 承诺捕获行为
似乎以下操作不会引发错误: 但这带来了一个错误:Javascript 承诺捕获行为,javascript,promise,ecmascript-6,es6-promise,Javascript,Promise,Ecmascript 6,Es6 Promise,似乎以下操作不会引发错误: 但这带来了一个错误: 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(va
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
对原因有任何猜测吗?必须将
.catch
直接链接在之后。即使您这样写,它仍然会报告未完成:
var p=新承诺(函数(解析、拒绝){
setTimeout(函数(){
//p、 catch(函数(){console.log('catched');});
console.log(p)
拒绝(“ko”);
}, 1000);
});
p、 然后(函数(值){
console.log(值);
});
p、 catch(函数(){
console.log('catched');
});代码>这是因为您没有处理p中的错误。。。每个p.then
或p.catch
都是独立的,每个都必须(最终)处理错误我明白你的意思,但是你如何从setTimeout()内部实现错误捕捉器呢?因为本机承诺没有任何done()
方法。我不确定这是否可能。当然,这是考虑到这样一个事实,即我正在给某人一个承诺,并希望捕捉他们最终在承诺中犯下的错误。如果你想要这个功能,你最好的办法可能是让他们通过一个下一个函数,并请求承诺。因此,您将得到function createPromise(next){var p=new Promise(function(resolve,reject){});p.then(next).catch(function(){console.log('Error catch')})
Yes,但是他们失去了链接方法的可能性。我想接下来的问题是谁“他们”是的,听起来他们可能需要自己处理错误。
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