如何使用响应结果中的http / https形成一个对象并将其推入一个数组中

时间:2016-12-30 10:05:24

标签: arrays node.js mongodb

我是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
        })

      }
    });
    }

提前感谢。

1 个答案:

答案 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 
                   })
          }
      })
}
}