Несколько асинхронных вызовов общедоступного API (rails+node.js или реактивный js)

Я пытаюсь сделать неблокирующие вызовы 3 общедоступным API, то есть веб-сайту A, B, C, а затем перенаправить результаты обратно в приложение rails в виде данных JSON. Я спросил, возможно ли это в node.js на другом форуме, и кажется, что да, и кто-то указал мне на это решение, которое включает использование модуля шага node.js и асинхронной библиотеки:

Step( 
// Make 3 async calls in parallel 
  function loadStuff() { 
    getResultFromSiteA(params1, this.parallel()); 
    getResultFromSiteB(params2, this.parallel()); 
    getResultFromSiteC(params3, this.parallel()); 
  }, 
// Pass the result to Rails when you're done 
  function passOntoRails(err, resultsA, resultsB, resultsC) { 
    if (err) { throw err; } 
    passResultsToRails(resultsA, resultsB, resultsC); 
  } 
)

Недавно я также нашел здесь похожий вопрос. Ответ предлагает использовать оператор forkjoin, доступный в расширении js, о котором я никогда не слышал; «реактивный js».

Итак, насколько я понимаю, есть 2 способа сделать это; первый - через node.js, а второй - через простые множественные асинхронные вызовы ajax со стороны клиента с использованием "реактивного".

Я хотел бы знать, работает ли один способ лучше/быстрее, чем другой? Спасибо. любые мнения/ответы/предложения будут оценены.


person Benny Tjia    schedule 28.12.2011    source источник


Ответы (1)


Ну, идея та же, но первый подход — для сервера (Node.js), а второй — для браузера (который в данном случае вам не нужен).

Поскольку у вас есть N асинхронных задач, которые необходимо решить, и только потом (после выполнения всех задач и возврата результатов) вы можете отправить данные обратно в Rails, то с помощью либо Step или Async подойдут.

Как они работают за кулисами? Итак, у вас есть N задач, и после решения каждой задачи N становится N-1 и так далее, пока N == 0, а затем функция обратного вызова выполняется с нужными данными.

Подробнее об управлении потоком в Node.js читайте здесь:

http://howtonode.org/control-flow
http://howtonode.org/step-of-conductor
http://dailyjs.com/2011/11/14/popular-control-flow/

person alessioalex    schedule 28.12.2011
comment
Спасибо за указание на Async. Полностью удовлетворил мои потребности. Я вижу, что это будет хорошо используемая библиотека для меня. - person phatmann; 30.09.2012