我正在尝试对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'。
我想知道一种方式是否比另一种更好/更快?谢谢。任何意见/答案/建议将不胜感激。
答案 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