Node.js异步编程 - 复制二进制文件流

时间:2012-10-25 11:42:42

标签: node.js

我想读取文件A中的所有字节,从每个字节中减去0x80,并将结果写入文件B.

这是一些伪代码:

try:
    open file A for reading
    open file B for writing

    loop until EOF:
        x = next byte from file A
        x = x - 0x80;
        write x to file B

finally:
   close file A
   close file B

如何使用异步文件系统函数在node.js中完成此操作?

我试了一下,但是当我的代码深入了解回调和异常处理时,我放弃了。请教我干净的异步编程。 :)

1 个答案:

答案 0 :(得分:0)

“但是当我的代码在回调和异常处理方面达到了六个级别时放弃了”...

这叫做“回调地狱”,它是异步编程所固有的。

可能的解决方案:

您可以使用 wait.for ,这是我最近开发的 非常简单的 库,按顺序编程(如在您的伪代码中)避免回调地狱。 校验: http://github.com/luciotato/waitfor

你也可以谷歌“nodejs promises”,https://github.com/kriskowal/q 和“nodejs async lib”,https://github.com/caolan/async 但是考虑到promises和async libs增加了复杂性,以减轻回调地狱的痛苦(它们也提供了很多功能,但代价是增加了新的概念和更多的复杂性)。

注意:在您的示例的特定情况下,核心节点'fs'模块 - http://nodejs.org/api/fs.html - 使 例外“不应该阻塞节点” 并通过提供几乎所有功能的两个版本来简化回调地狱,一个标准异步,另一个阻止*同步。