使用jQuery的$ .when在node.js上进行AJAX GET调用

时间:2017-02-22 19:04:33

标签: jquery ajax node.js

我需要的是在我的服务器端(Node.js),做这样的事情:

$.when(
            $.get("https://graph.facebook.com/341446932600922/posts?fields=message,created_time&limit=2", function (dataAcib) {
                allPosts.acib = dataAcib.data;
            }),
            $.get("https://graph.facebook.com/599914540070454/posts?fields=message,created_time&limit=2", function (dataBlusoft) {
                allPosts.blusoft = dataBlusoft.data;
            })
        ).then(function () {
            $.each(allPosts, function () {
                for (i = 0; i < this.length; i++)
                {
                    $("#divNoticias").append("<p>" + this[0].message + "</p>");
                }

                //- console.log(this[0].message);
            });

            console.log(allPosts);

            var posts = $.makeArray(allPosts.data);
            console.log(posts);
        });

我想在服务器端完成此操作,以便我可以将结果发送到客户端。

我已经使用了Requestify,并成功获取了一个请求的数据,但是我希望以异步方式完成所有请求(共6个),并在完成后,转发回调。

如何进行所有GET调用以及完成所有这些调用后,在节点服务器端进行回调?

由于

1 个答案:

答案 0 :(得分:0)

注意:我之前从未使用过Requestify,但我会根据他们的文档对其进行修改。

使用异步时,我喜欢使用async.js,因为它非常有用。我们可以使用它来map每个回复的网址。

var async = require('async'),
    requestify = require('requestify');

var urls = [
    'https://graph.facebook.com/341446932600922/posts?fields=message,created_time&limit=2',
    'https://graph.facebook.com/599914540070454/posts?fields=message,created_time&limit=2'
];
// loop through each URL
async.mapSeries(urls, function (url, done) {
    // for a particular URL, make the request
    requestify.get(url).then(function (response) {
        // pass the response
        done(null, response);
    });
// when all URLs are done
}, function (err, responses) {
    // responses should be an array e.g. [response, response]
    // now do something with responses
});

修改

我不知道你从Facebook收到什么样的数据。对于每个操作,您可以通过仅传递所需的数据来调整代码。

async.mapSeries(urls, function (url, done) {
    // for a particular URL, make the request
    requestify.get(url).then(function (response) {
        // pass the response data
        done(null, response.data);
    });
// when all URLs are done
}, function (err, responses) {
    // responses should be a multi-dimensional array e.g. [[data], [data]]
    // here, you could merge and flatten them
    responses = [].concat.apply([], responses);
    console.log(responses);
    // now do something with responses
});

合并和展平逻辑来自此answer