是否可以在Q.All中一次性返回所有“失败”

基本上,我有一大堆我想testing网站的对象。 我正在使用下划线将URL转换为HTTP请求的承诺数组。 一旦失败,链条就结束了(我预料到了这一点)。 是否有可能收集所有失败并返回到失败function? 或者我将不得不写这个使用allSettled然后parsing?

var Q = require('q') var _ = require('underscore') var JSON = require('JSON') var FS = require("q-io/fs"); var HTTP = require("q-io/http"); FS.read('members.json').then(function(memberJson){ return JSON.parse(memberJson) }).then(function(memberObjects){ var httpCheckPromises = _. chain(memberObjects). first(100). filter(function(member){ return member.website.toLowerCase().indexOf('www') >= 0 }). map(function(member){ return HTTP.read(member.website) }). value() return Q.all(httpCheckPromises) }).then(function(goodRequests){ console.log(goodRequests) }).fail(function(badRequests){ console.log('bad') console.log(badRequests) }) 

我将不得不写这个使用allSettled,然后parsing?

是的,如果你不想中止第一个失败的请求。

 FS.read('members.json') .then(JSON.parse) .then(function(memberObjects){ var httpCheckPromises = _.chain(memberObjects) .first(100) .pluck("website") .filter(function(website){ return website.toLowerCase().indexOf('www') >= 0; }) .map(HTTP.read) .value(); return Q.allSettled(httpCheckPromises); }).then(function(requests) { var goodRequests = _.chain(requests) .where({state:"fulfilled"}) .pluck("value") .value(), badRequests = _.chain(requests) .where({state:"rejected"}) .pluck("reason") .value(); console.log("good:", goodRequests); console.log("bad:", badRequests); });