我正在建立一个博客网站w/Express,并首次使用Q,我希望利用经验丰富的Q用户的知识。
我向DB发出一个加载post数据的请求,另一个请求访问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的一些东西,这将允许一个更好的方法?
发布于 2015-12-19 20:30:01
如果您希望在blogPromise和instagramPromise都解决或拒绝时解决您的承诺,则需要使用 method。以下是文档中的一个示例:
Q.allSettled([blogPromise, instagramPromise])
.then(function (results) {
var loaded = results.filter(function (result) {
return result.state === "fulfilled";
});
good(loaded);
});在allSettled的回调中,您可以成功地过滤加载的结果并将它们传递给good函数,或者使用bad one处理失败的结果。
发布于 2015-12-19 20:30:45
也许是这样的?
Q.all([
blogPromise,
instagramPromise.catch(function() { return {error: true}; })
]).then(good, bad);这与您提到的方法类似,不同的是,错误抑制是在使用它的地方进行的,而不是在错误产生的地方进行的。
https://stackoverflow.com/questions/34375011
复制相似问题