Node.js的同步代码与异步代码

Mod*_*ika 14 javascript node.js

我们正在使用node,主要用于内部项目并了解使用该技术的最佳方式.

不是来自特定的异步背景,学习曲线可能是一个挑战,但我们已经习惯了框架并学习了这个过程.

让我们两极化的一件事是,使用同步代码与异步代码的最佳时间是.我们当前正在使用规则,如果有任何事情与IO交互,那么它必须通过回调或事件发射器(即给定的)是异步的,但是其他不以任何方式使用IO的项可以构造为同步函数(这还取决于函数本身的重量以及它实际上是如何阻塞的)但这是使用Node.js时最好的方法吗?

例如,我们正在创建一个Hal + JSON构建器,它当前存在于我们的代码库中.它是同步的,因为它所做的只是创建一些相当小的对象文字,仅此而已,没有外部依赖,当然也没有IO交互.

我们的方法是否适合采取?

jev*_*lio 18

比方说,你有两个功能,foo并且bar,这是同步执行:

function foo() {
    var returnValue = bar();
    console.log(returnValue);
}

function bar() {
    return "bar";
}
Run Code Online (Sandbox Code Playgroud)

为了使API"异步"是将其更改为使用回调:

function foo() {
    bar(function(returnValue) {
        console.log(returnValue);
    });
}

function bar(callback) {
    callback("bar");
}
Run Code Online (Sandbox Code Playgroud)

但事实是,这段代码仍然是完全同步的.回调正在同一个调用堆栈上执行,并且没有进行线程优化,也没有可伸缩性的好处.

然后它成为代码可读性和编码风格的问题.我个人认为典型的var val = func();类型代码更易读,更容易理解.唯一的缺点是,如果你有一天需要改变它的功能bar,它需要执行一些I/O活动或调用一些异步的其他功能,你还需要更改API bar.

个人的偏好:适用时使用传统的,混合模式.在涉及I/O或有疑问时,始终使用异步样式.