我正在尝试通过使用promises的递归来实现循环结构。使用此代码:
(function a(i) {
return new Promise(function(resolve, reject) {
if (i < 10) {
(function b() {
return new Promise(function(resolve, reject) {
if (1 != 1) {
resolve();
} else {
throw new Error('error from b'); // This works
};
});
})().then(function() {
i++;
resolve(a(i));
})
.catch(function(error) {
reject(new Error(error)); // This does work
// throw new Error(error); // Why doesn't this work?
});
} else {
console.log('loop complete');
};
});
})(0).catch(function(error) {
console.log(error);
console.log('done');
});
我发现如果我在Promise
构造函数中抛出错误,那么错误会自动处理并且似乎传递给reject
函数。但是如果我在传递给catch
函数的回调中抛出错误,那么父catch
不会处理错误。
为什么会这样?