2017-02-22 9 views
0

то, что мне нужно, чтобы на моей стороне сервера (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

search 'mdn prom', чтобы найти документацию по обещаниям javascript, что в основном делает отложенный jQuery. –

ответ

0

Примечание: Я никогда не использовал Requestify раньше, но я возьму трещины на него на основе их документации.

При работе с async, мне нравится использовать async.js, так как это очень полезно. Мы можем использовать его до map каждого URL-адреса для их ответов.

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

+0

Спасибо, это был ответ! – JDalri

+0

Удивительный. Пожалуйста, отметьте это как ответ тогда :) – Mikey

Смежные вопросы