Несколько асинхронных публичных вызовов API (rails + node.js или реактивные js) - PullRequest
0 голосов
/ 29 декабря 2011

Я пытаюсь сделать неблокирующие вызовы 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».

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

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

1 Ответ

1 голос
/ 29 декабря 2011

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

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

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

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

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

...