【发布时间】:2025-12-11 17:00:01
【问题描述】:
从昨天开始,我试图理解一个我不知道的关于 onReject Promise 回调的行为。事实上,我使用 API(返回 json 数据)和 Superagent 来发出请求。我有这门课:
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 包含一个简单的字符串)。事实上,萤火虫显示这个错误:
uncaught exception: ...
你能解释一下这种行为吗?
PS:我使用 babel 来编译 js。
编辑
我用 when librairie 进行了测试,但结果相同。但是,当我写:
reject(new Error("foo"));
onReject 回调永远不会被调用:
when.all([
api.get(...),
api.get(...)
]).then(data => {
console.log(data)
}, err => {
console.log(err);
})
在浏览器中:
我继续我的研究。
编辑 2
真的很抱歉,我应该在公共广场上被鞭打!!!。事实上,我不得不更改一个文件而不是两个。真的,真的很抱歉!!
【问题讨论】:
-
好吧,无论出于何种原因访问
res.body.error都会引发错误,请尝试找出出现这种情况的原因(例如,它不存在)。 -
事实上,并不是
res.body.error抛出错误,因为当我写reject("foo")时,结果是一样的。 -
或者实际的
this.requestPending.end函数抛出错误。你读过异常的内容吗? -
把函数的内容放在一个try/catch里面
-
不,异常没有被捕获。事实上,我使用
Promise.all(发送多个请求)。我只是用一个承诺进行了测试。这次 .then 方法上的 onReject 回调已经运行。但是,Promise.all应该具有与一个承诺相同的行为?!
标签: javascript promise babeljs