0

我正在尝试对 3 个公共 API 进行非阻塞调用,即网站 A、B、C,然后将结果作为 JSON 数据转发回 Rails 应用程序。我在另一个论坛的 node.js 中询问这是否可能,似乎是这样,有人向我指出了这个涉及使用 node.js Step 模块和异步库的解决方案:

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); 
  } 
)

最近我在这里也发现了类似的问题。答案建议使用我从未听说过的 js 扩展中可用的 forkjoin 运算符;'反应式 js'。

因此,据我所知,有两种方法可以做到这一点;第一种通过node.js,第二种方法是通过使用“反应式”从客户端进行简单的多个异步ajax调用。

我想知道一种方法是否比另一种方法更好/更快?谢谢。任何意见/答案/建议将不胜感激。

4

1 回答 1

1

这个想法是一样的,但是第一种方法是针对服务器(Node.js),第二种方法是针对浏览器(在这种情况下你不需要)。

由于您有 N 个需要解决的异步任务,然后(在执行所有任务并返回结果之后)您才能将数据发送回 Rails,因此使用StepAsync都可以。

他们如何在幕后工作?好吧,您有 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/

于 2011-12-28T20:56:01.397 回答