未捕获的异常onReject回调Promise

时间:2015-06-04 12:15:04

标签: javascript promise babeljs

从昨天开始,我尝试了解一些我不了解 onReject Promise回调的行为。事实上,我使用API​​(返回json数据)和Superagent for make request。我有这门课:

class Api
{
    constructor(uri) {
        ...
    }

    // Simple GET HTTP Request
    get(...) {
        var url = this.buildUrl(...);
        this.requestPending = request.get(url);
        return new Promise((resolve, reject) => {
            this.requestPending.end((err, res) => {
                if (err) {
                    reject(res.body.error);
                } else {
                    resolve(res.body);
                }
            });
        });
    }
}

我不明白的是:

reject(res.body.error);

抛出异常(res.body.error包含一个简单的字符串)。实际上,firebug显示了这个错误:

uncaught exception: ...

你能解释一下这种行为吗?

PS:我与 babel 合作,用于转换js。

修改

我在 librairie时使用进行了测试,但结果相同。但是,当我写:

reject(new Error("foo"));

onReject 回调永远不会调用:

when.all([
   api.get(...),
   api.get(...)
]).then(data => {
   console.log(data)
}, err => {
   console.log(err);
})

并在浏览器中:

Promise reject error

我继续我的研究。

修改2

真的很遗憾,我值得在公共场所鞭打!!!事实上,我不得不改变一个文件而不是两个。真的,真的很抱歉!!

1 个答案:

答案 0 :(得分:0)

我不知道它是否愚蠢,可能是requestPending的范围可能是问题。如果它听起来很傻,

 var url = this.buildUrl(...),self = this;
        this.requestPending = request.get(url);
        return new Promise((resolve, reject) => {
            self.requestPending.end((err, res) => {
                if (err) {
                    reject(res.body.error);
                } else {
                     resolve(res.body);
                }
            });
        });
    }
}