在Node.js中的forEach中调用https.get

时间:2015-12-04 11:49:13

标签: javascript node.js asynchronous foreach

我正在async.waterfall块中进行多次https.get次调用。在上一个function(callback)中,我有一个forEach循环,它迭代我在上次调用中收到的变量,并相应地调用GET

我的问题是,当我在UI中看到时,它不会每次检索所有文件。有时它显示所有文件,但有时只显示部分文件。配置文件页面呈现在所有REST调用完成且fileData未完全填充之前发生。我怎样才能解决这个问题?这是我的代码 -

async.waterfall([
    function(callback) {
        //I do a https.get call here and pass on 2 arguments to the next method
    },

    function (var1, var2, callback) {
        //I do a https.get call here and pass on 2 + 1 arguments to the next method
    },

    function (var1, var2, var3, callback) {
        //Here i do a https OPTIONS call to get all the available REST endpoints and pass those as var4
    },

    function (var1, var2, var3, var4, callback) {
        var fileData = [];

        var4.forEach(function(element){
            const url = host + var1 + element;

            https.get(url, function (n) {
                var output = '';
                n.on('data', function (chunk) {
                    output += chunk;
                });

                n.on('end', function () {
                    var fileJson = JSON.parse(output);
                    console.log("FileJSON data here :", fileJson);
                    if(fileJson) {
                        if (fileJson.owner == req.user.username) {
                            fileData.push(fileJson);
                        }
                    }
                });

                if(var4[var4.length - 1] == element){
                    n.on('end', function () {
                        res.render('viewProfile',{
                            title: 'View Profile',
                            fileData: JSON.stringify(fileData),
                            events: JSON.stringify(var2),
                            customerEvents: JSON.stringify(var3)
                        });
                    });
                    callback(null, 'done');
                }
            }).on('error', function(e) {
                console.log("Got error: " + e.message);
            });
        });
    }
], function(err, result){
    if(err) return next(err);
});

0 个答案:

没有答案