[英]Q library (javascript) - handling q.reject() in a promise with Q.all()
我正在建立一个带快递的博客站点,并且第一次使用Q,我希望能够利用资深Q用户的知识。
我正在向我的数据库发出一个请求来加载发布数据,另一个发出Instagram API的请求(除非它已经被缓存)并返回一些json。 所以我有类似的东西:
Q.all([blogPromise, instagramPromise]).then(good, bad);
我遇到的问题是我的instagramPromise
请求失败,我调用deferred.reject()
,调用我的bad
函数。 但是,如果我的blogPromise
结算,我仍然想要加载带有博客帖子数据的页面,但是当我的bad
函数被调用时,我似乎没有得到任何参数(例如,我没有获得成功获取的blogPromise数据) 。
鉴于此,似乎我唯一的选择是在出现错误时不调用deferred.reject()
,而是使用deferred.resolve({error: true})
调用deferred.resolve()
,然后我可以在其中使用我的good
功能是处理传递给我视图的内容。
所以我的问题是,这听起来不错吗? 这不是使用resolve
的Q的误用,实际上我遇到了错误,应该使用reject
吗? 或者我错过了Q的东西可以让更好的方法?
如果你希望你的承诺,以解决当两个blogPromise
和instagramPromise
或者消除或者拒绝,你需要使用allSettled
方法 。 以下是文档中的示例:
Q.allSettled([blogPromise, instagramPromise])
.then(function (results) {
var loaded = results.filter(function (result) {
return result.state === "fulfilled";
});
good(loaded);
});
在allSettled
的回调中你可以过滤成功加载的结果并将它们传递给good
函数。 或以某种方式处理失败的结果bad
之一。
也许这样的事情?
Q.all([
blogPromise,
instagramPromise.catch(function() { return {error: true}; })
]).then(good, bad);
它与您提到的方法类似,区别在于错误抑制是在使用它的地方完成的,而不是在错误发生的地方。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.