【发布时间】:2014-03-22 06:50:00
【问题描述】:
基本上在下面的脚本中,我想知道导致失败状态的请求的 URL。
我是否需要将其封装在一个对象中并继续向下游传递?
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(50)
.filter(function(member){
return member.website.toLowerCase().indexOf('www') >= 0
})
.map(function(member){
return HTTP.read(member.website)
})
.value()
return Q.allSettled(httpCheckPromises)
}).then(function(responses){
return _.chain(responses)
.where({state:'rejected'})
.pluck('reason')
.pluck('response')
.value() ;
}).then(function(badResponses){
return _.chain(badResponses)
.filter(function(response) {
return response
})
.map(function(response){
return {
status: response.status
, headers: response.headers
}
})
.value()
}).then(function(responses){
return FS.write("members_with_bad_urls.json", JSON.stringify(responses,null,4))
}).then(function(){
console.log('DONE!')
}).fail(function(reason){
console.log('FAIL!')
console.log(reason)
})
例如在我的第二个代码块中添加返回一个对象
then(function(memberObjects){
var httpCheckPromises = _.chain(memberObjects)
.first(50)
.filter(function(member){
return member.website.toLowerCase().indexOf('www') >= 0
})
.map(function(member){
return {
url: member.website
,response: HTTP.read(member.website)
}
})
.value()
return Q.allSettled(httpCheckPromises)
})
但我认为我会遇到需要重写 Q.allSettled 的问题。
【问题讨论】:
标签: javascript node.js promise q