所有nodejs都是异步运行的?

时间:2017-03-29 18:11:28

标签: javascript node.js asynchronous

我试图了解async / promises / callbacks / js modules / etc ...但是,当我试图运行一个只需要一个文件的简单模块时,运行一个只返回参数的函数,节点未正确输出结果。我的意思是,它有时只返回值,有时不返回。

我很新,所以我可能错了,但据我所知,这是节点中的异步(?)。但是在研究时,我只是在列表中查找使用异步的东西,例如加载,等待,超时等。但似乎我在节点中运行的所有内容,无论使用异步运行多么简单并且不会始终如一地输出值?以下是我在节点控制台中运行和接收的示例:

> function test(input){
... return input;
... }
> test('a')

> test('a')
'a'
>
> test(5)

> test(5)
5
>

就像我说的那样,我正在努力学习一些事情,但它最初是通过研究模块来开始的,所以我也想知道处理这个问题的常见模式(?)是什么时候导出模块。感谢。

编辑:

我不确定我是否说得非常清楚,但在大多数情况下,我真的只是想知道为什么这个简单的功能不起作用,当我见过的唯一功能时在某种意义上,谈论异步是从明显等待的功能。这不是简单的功能。我还没有尝试用这个回调,但我认为这有效。我只是觉得你不需要它们来完成这么简单的功能吗?

3 个答案:

答案 0 :(得分:0)

这就是Node REPL中的相同输入对我有用的方式:

> function test(input){
... return input;
... }
undefined
> test('a')
'a'
> test('a')
'a'
> test(5)
5
> test(5)
5
>

test()函数在您的示例中不是异步的。它同步返回值。但是,您包含的REPL会话似乎并不重要,因为您的函数定义应该像我的示例中那样返回undefined

回答你的问题:并非所有Node函数都必须是异步的。简单地返回值的每个函数都是同步的 - 例如, Math.sin()等。

为了更好地理解这一切,请看一下这个显示同步和异步函数示例的答案,逐步解释执行顺序:

答案 1 :(得分:0)

使用类似的东西

function test(input,callback){
 return callback(input);
}

test('a',function(s){console.log(s)})

答案 2 :(得分:-1)

根据您的问题,您使用的功能不是异步功能,也不会为异步操作建模。它会阻塞,直到返回结果。

不要对你的cli返回的结果感到困惑;有时这样做很正常。然而,异步操作用于抽象节点中的长时间运行操作,例如数据库请求,文件i / o请求,在线信息请求等,以便稍后返回信息。

更合适的方法是使用带回调的函数,使用es7异步并等待或使用事件发射器。这些是在节点中处理异步操作的唯一方法。

您可能需要阅读beginning node js