为什么在Promises catch回调中抛出错误导致未处理的promise拒绝?

时间:2018-03-08 14:32:03

标签: javascript promise

我正在尝试通过使用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不会处理错误。

为什么会这样?

0 个答案:

没有答案