在形成阵列时,Promise不起作用

时间:2016-12-31 06:07:15

标签: javascript angularjs arrays node.js express

我试图使用" Promise"形成一个产生对象的数组。在我的服务器端,但是在将总对象推送到该数组之后,数组没有打印,它显示一个空数组

这是我的代码

 var Promise = require('bluebird'),
         hh = require('http-https')
         mongoose = require('mongoose'),
         collection = mongoose.model('Collection');


    function getInValidImgUrl(prodObj){

 return new Promise((resolve, reject) => {

    hh.get(prodObj.imageUrl, function (res) {
      if (res.statusCode !== 200) {
        /*  console.log("IN HHHHH : " + res.statusCode);*/
        resolve({
          type: 'success',
          ImgUrl: prodObj.imageUrl
        })
      }

    }).on('error', function (e) {
      // console.error(e);
      resolve({
        type: 'error',
        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++){
           var calback = getInValidImgUrl(products(i));
            calback.then(function(result){
               imgArr.push(result);
              console.log(JSON.stringify(imgArr)); // In this it showing every object is pushing into imgArr
             })
        }

       Promise.all(imgArr).then(results =>{
          console.log("IAMGE ARRAY :"+JSON.stringify(results)); //here iam not getting array it is showing an empty array
        })

      }
    });
    }

我可能知道我在哪里犯了一个错误,以及为什么它不打印整个数组。

非常感谢

1 个答案:

答案 0 :(得分:1)

getInValidImgUrl是异步的。返回结果后,回调中会填充imgArr

在返回所有先前的http请求承诺之前,您的promise.all正在执行。

检查here for Promise.all docs

尝试:

var calback=[];
 for(var i=0; i<products.length: i++){
           calback[i] = getInValidImgUrl(products(i));
        }
 Promise.all(calback).then(results =>{
          console.log("IAMGE ARRAY :"+JSON.stringify(results)); 
        })

A sample js fiddle to show Promise.all