如何在Node.js中执行IO任务序列[重复]

Posted

技术标签:

【中文标题】如何在Node.js中执行IO任务序列[重复]【英文标题】:How to execute sequence of IO task in Node.js [duplicate] 【发布时间】:2013-09-02 13:16:16 【问题描述】:

我只是对 node.js 感兴趣。

如果一切都是“非阻塞”执行,它什么时候将结果刷新到客户端(浏览器),如果我想从数据库获取结果,发布到其他服务器,并返回从其他服务器获取的结果,执行我需要将回调放在这样的回调中吗?

var dbquery = db.query(function(result)
    var postToServer = otherServer.post(result.id,function(networkResult)
           render(networkResult)
    )

)

或者可以“更优雅”地处理?

【问题讨论】:

我更喜欢使用回调,因为同步任务有时会冻结浏览器。 注意:在标题should be avoided中使用或重复标签,这就是为什么Andy G edited要删除它。 “你应该在标题中使用标签的唯一情况是当它们与标题的对话语气有机结合时”,这里就是这种情况。 @cababunga 也许吧。但是,由于 node.js 标记已经应用于问题,它仍然是多余的。 【参考方案1】:

使用库,例如​​https://github.com/kriskowal/q(承诺)或https://github.com/caolan/async。

【讨论】:

【参考方案2】:

这正是 promise 的用途。在 javascript 中实现它们的库很少。

https://github.com/kriszyp/node-promise http://howtonode.org/promises

这里解释的有点多,所以你必须去阅读并看一些示例代码。

基本上你的代码看起来像这样:

query_db()
.then(function (result)  return otherServer.post(result.id); )
.then(function (networkResult)  render(networkResult); );

【讨论】:

以上是关于如何在Node.js中执行IO任务序列[重复]的主要内容,如果未能解决你的问题,请参考以下文章

我无法弄清楚如何防止在 Node.js 中出现此 CORS 错误 [重复]

来自 node.js 服务器的 Ajax POST [重复]

Node.Js执行原理图引发的思考

Node.js 如何在快速路由中使用 socket.io

如何在 node.js 中接收 socket.io 客户端事件?

我在集群 node.js/socket.io/redis pub/sub 应用程序中收到重复消息