繁体   English   中英

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

[英]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的东西可以让更好的方法?

如果你希望你的承诺,以解决当两个blogPromiseinstagramPromise或者消除或者拒绝,你需要使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM