多个异步公共API调用(rails + node.js或reactive js)

时间:2011-12-28 20:46:00

标签: javascript node.js reactive-extensions-js

我正在尝试对3个公共API进行非阻塞调用,即网站A,B,C,然后将结果作为JSON数据转发回rails应用程序。我问在另一个论坛上是否可以在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); 
  } 
)

最近我还找到了similar question here。答案建议在js扩展中使用forkjoin运算符,这是我从未听说过的; '反应性的js'。

因此,据我所知,有两种方法可以做到这一点;第一个是通过node.js,第二个是通过简单的多个异步ajax调用来自客户端使用'reactive'。

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

1 个答案:

答案 0 :(得分:1)

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

由于您有N个需要解析的异步任务,并且只有这样(在执行所有任务并返回结果之后),您可以将数据发送回Rails,然后使用Step或{{3很好。

他们如何在幕后工作?你有N个任务,在每个任务解决后,N变为N-1,依此类推,直到N == 0,然后用所需的数据执行回调函数。

在此处阅读有关Node.js中流控制的更多信息:

Async
http://howtonode.org/control-flow
http://howtonode.org/step-of-conductor