我是nodejs的新手,我正在尝试通过使用“http.get”来形成一个产品数组,这些产品使用了无效的imageUrls,我从我的mongodb集合中查询我的产品,虽然我使用了“Promise”这个数组是首先打印,我没有得到“hh.get”的结果
var Promise = require('bluebird'),
hh = require('http-https')
mongoose = require('mongoose'),
collection = mongoose.model('Collection');
function getInValidImgUrl(prodObj){
return hh.get(prodObj.imageUrl,function(res){
if(res.statusCode == 404){
return {
name:prodObj.name,
imgUrl:prodObj.imageUrl
}
}
})
}
exports.sampleFunc=function(){
collection.find({category:"electronics"}).exec(function(err,products){
if(err){
console.log(err)
}else{
var imgArr=[];
//eg:products=[{name:"mobile",imageUrl:"http://somepic.jpg"}]
for(var i=0; i<products.length: i++){
imgArr.push(getInValidImgUrl(products(i)));
}
Promise.all(imgArr).then(results =>{
console.log("IAMGE ARRAY :"+JSON.stringify(results)); //here iam not getting array
})
}
});
}
提前感谢。
答案 0 :(得分:1)
你实际上并不需要使用bluebird,虽然你可以使用npm包请求 - 承诺(https://www.npmjs.com/package/request-promise)我使用了很多。为了不改变你所拥有的东西,你的问题是你在getInValidImgUrl函数的回调中返回。您可以更改此选项以使用节点(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise)
免费提供的标准Promise类function getInValidImgUrl(prodObj){
return new Promise((resolve,reject) => {
hh.get(prodObj.imageUrl,function(res){
if(res.statusCode == 404){
resolve( {
name:prodObj.name,
imgUrl:prodObj.imageUrl
})
}
})
}
}