Q库(javascript) – 使用Q.all()在promise中处理q.reject()

我正在建立一个带快递的博客站点,并且第一次使用Q,我希望能够利用资深Q用户的知识.

我正在向我的数据库发出一个请求来加载发布数据,另一个发出Instagram API的请求(除非它已经被缓存)并返回一些json.所以我有类似的东西:

Q.all([blogPromise,instagramPromise]).然后(好,坏);

我遇到的问题是我的InstagramPromise请求失败,我调用deferred.reject(),调用我的错误函数.但是,如果我的blogPromise结算,我仍然想要加载带有博客帖子数据的页面,但是当我的错误函数被调用时,我似乎没有得到任何参数(例如,我没有获得成功获取的blogPromise数据) .

鉴于此,似乎我唯一的选择是在出现错误时不调用deferred.reject(),而是使用deferred.resolve({error:true})调用deferred.resolve(),然后我可以在其中使用我的好功能是处理传递给我视图的内容.

所以我的问题是,这听起来不错吗?这不是使用解决方案的Q的误用,实际上我遇到了错误,应该使用拒绝吗?或者我错过了Q的东西可以让更好的方法?

最佳答案 如果您希望在blogPromise和InstagramPromise解析或拒绝时解除您的承诺,则需要使用
allSettled method.以下是文档中的示例:

Q.allSettled([blogPromise, instagramPromise])
.then(function (results) {
    var loaded = results.filter(function (result) {
        return result.state === "fulfilled";
    });
    good(loaded);
});

在allSettled的回调中,您可以过滤成功加载的结果并将它们传递给good函数.或者以某种方式处理失败的结果.

点赞