Javascript Promise.all()在函数完成之前执行,node.js请求库

时间:2016-08-04 22:39:20

标签: javascript node.js

我使用node js请求,向其他站点发出请求,所以请求是asyncronis函数,我需要在完成后执行代码,但由于某种原因Promise.all()执行之前,这里是代码:

          // in this object I store request's promises
         var tempObj = {};
         for (var i = self.numberOfPaginations.length; i >= 1; i--) {

            tempObj['request'+ i] = request('http://www.somewebsite.com/search/page='+i ,function (err,resp,body) {
             // gets urls of listings
             if (!err && resp.statusCode == 200) {

                    var $ = cheerio.load(body);

                     $('.title').each(function() {
                        self.urls.push($(this).attr('href'));
                     });

                     $('.info a').each(function () {
                         self.urls.push($(this).attr('href'));
                     });

                     // this log out puts the desired result
                     console.log(self.urls);

             }



            });



         }  
            // this line of code pushes promises into array
            Promise.all(Object.keys(tempObj).map(function (key) {return tempObj[key]})).then(function (argument) {
                // this line of code executes before all the work in requests is done , however it should not!
                console.log(self.urls);

            });

所以我的问题是Promise.all()中的代码行之前由于某种原因而执行

1 个答案:

答案 0 :(得分:0)

您应该使用this package或者使用以下内容对请求函数进行promisify:

requestAsync = Promise.promisify(request); 

(但是我从未尝试过第二次。我使用Request-Promise packege制作一个网络刮刀,它的工作原理非常好)。