将两个不同的url请求的结果连接在一起

时间:2016-11-22 11:58:01

标签: javascript node.js express

我有一个Node js程序,但是我很难理解如何在一个变量中将响应细节加在一起。

让我解释一下我的意思:

  1. 我有不同的URL,我同时对所有这些URL进行请求(它需要同时)。

  2. 我得到的回复有所不同,具体取决于网址结尾 - 回复可以是Dog-ListCat-List

  3. 然后我需要从Dog-list获取信息,因此我有if语句说如果响应包含Dog-List,则打印出“狗列表”并运行所需的代码

  4. 如果是Cat-List,请在“猫列表”中打印并运行所需的代码。

  5. 最后,获取狗和猫的信息并将它们连接在一起形成一个变量。

  6. 这是代码:

    var urls = ['http://111.1:1111/cats', 'http://111.1:1111/dogs'];
    
    function test() {
        async.map(urls, function(url, cb) {
            request.get(url, function(error, response, body) {
                if (error) {
                    console.log(error);
                } else {
                    parseString(body, function(result) {
    
                        var age1 = 0;
                        var age2 = 0;
    
                        if (result.Return['Cat-List']) {
                            console.log('in cat list');
                            age1 = result.Return['Cat-List'].age;
    
                        } else if (result.Return['Dog-List']) {
                            console.log('in dog list');
                            age2 = result.Return['Dog-List'].age;
                        }
    
                        data = age1 + age2;
                        console.log(data);
                    });
    
                }
            });
        });
    }
    

    但是,正如您所期望的那样,因为我在从每个URL获得响应后使用了“if”语句,所以我只会进入狗或猫列表,因此我的结果永远无法合并。

    这是我运行程序时打印的内容:

    in cat list
    2
    in dog list
    3
    

    这是因为猫的年龄是2岁,而狗的年龄是5岁。

    这就是我希望cmd看起来像:

    in cat list
    in dog list
    5
    

    在不使用if语句的情况下,有不同的方法吗?或者只是做其他事情一起加入结果?我只是在努力达到这个结果。任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:0)

如果您想在任何地方使用data值,那么您需要使用以下内容运行回调:

cb(null, data);

null表示没有错误。

你还需要另一个回调作为async.map的参数,以便在完成所有操作时调用:

function test() {
    async.map(urls, function (url, cb) {
        // code to run for every value
    },
    function (err, results) {
        // code to run after everything is finished
        // here you can sum the results
    });
}

有关详细信息,请参阅:

完整示例 - 未经测试:

var urls = ['http://111.1:1111/cats', 'http://111.1:1111/dogs'];

function test() {
    async.map(urls, function (url, cb) {
        request.get(url, function(error, response, body) {
            if (error) {
                console.log(error);
            } else {
                parseString(body, function(result) {
                    var age = 0;
                    if (result.Return['Cat-List']) {
                        console.log('in cat list');
                        age = result.Return['Cat-List'].age;
                    } else if (result.Return['Dog-List']) {
                        console.log('in dog list');
                        age = result.Return['Dog-List'].age;
                    }
                    cb(null, age);    
                });

            }
        });
    }, function (err, results) {
        var sum = results.reduce((a, b) => a + b, 0);
        console.log(sum);
    });
}