首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Q库(javascript) -承诺使用q.reject()处理Q.all()

Q库(javascript) -承诺使用q.reject()处理Q.all()
EN

Stack Overflow用户
提问于 2015-12-19 20:22:49
回答 2查看 115关注 0票数 4

我正在建立一个博客网站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的一些东西,这将允许一个更好的方法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-12-19 20:30:01

如果您希望在blogPromiseinstagramPromise都解决或拒绝时解决您的承诺,则需要使用 method。以下是文档中的一个示例:

代码语言:javascript
复制
Q.allSettled([blogPromise, instagramPromise])
.then(function (results) {
    var loaded = results.filter(function (result) {
        return result.state === "fulfilled";
    });
    good(loaded);
});

allSettled的回调中,您可以成功地过滤加载的结果并将它们传递给good函数,或者使用bad one处理失败的结果。

票数 1
EN

Stack Overflow用户

发布于 2015-12-19 20:30:45

也许是这样的?

代码语言:javascript
复制
Q.all([
    blogPromise,
    instagramPromise.catch(function() { return {error: true}; })
]).then(good, bad);

这与您提到的方法类似,不同的是,错误抑制是在使用它的地方进行的,而不是在错误产生的地方进行的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34375011

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档