从昨天开始,我尝试了解一些我不了解 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);
})
并在浏览器中:
我继续我的研究。
修改2
真的很遗憾,我值得在公共场所鞭打!!!事实上,我不得不改变一个文件而不是两个。真的,真的很抱歉!!
答案 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);
}
});
});
}
}