Q.all的Promise数组

时间:2015-08-26 12:06:34

标签: arrays angularjs request q angular-promise

我有一系列链接,我在第一次请求时得到了这些链接。我的目标是转到每个链接来收集数据。所以我想为每个请求做出承诺,将它们全部推送到一个数组中,然后传递给Q.all来解决所有的承诺。问题是我无法返回承诺并转到下一个链接 这是函数,我试图发出多个请求并收集数据

function arrayPromise(linksArr){

function collectingData(elem){
    var deferredNew = Q.defer();
    var url = elem;
    request(url, function(error,response,html){
        if(error){
            deferredNew.reject(error);
        }
        var $ = cheerio.load(html);
        var title, content;

        $('.entry-title').filter(function(){
            var data = $(this);
            var title = data.text();
            items.text.push(
                {  titleof: title }
            )
        })

        $('.entry-content ').filter(function(){
            var data = $(this);
            var content = data.html();
            items.text.push(
                { contentof: content})
        })
        deferredNew.resolve(items);
    })
    console.log("Returning the promise");
    return defferedNew.promise;
}

var promiseArr;
console.log("LENGTH:");
console.log(linksArr.length);

for (var i = 0; i < linksArr.length; i++) {

    console.log(linksArr[i]);

    var tempPromise = collectingData(linksArr[i]);
    console.log(tempPromise);
    promiseArr.push(tempPromise);

};
    return promiseArr;
}

我是如何尝试使用它的

var linksPromise = fetchLinks();
linksPromise.then(function(arr){
    console.log("LINKS PROMISE RESOLVED");

    Q.all(arrayPromise(arr)).then(function(data){
        console.log("SUCCESS RESOLVING ALL PROMISES")
        console.log(data);
    },function(err){
        console.log("ERROR RESOLVING ALL PROMISES", err);
    });
},function(err){
    console.log(err);
})

1 个答案:

答案 0 :(得分:0)

promiseArr应声明为数组:

var promiseArr = [];

如果没有解决问题,请提供您可能会看到的错误。