首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >所有nodejs函数异步运行?

所有nodejs函数异步运行?
EN

Stack Overflow用户
提问于 2017-03-30 02:11:28
回答 3查看 69关注 0票数 0

我正在尝试学习异步/承诺/回调/js模块/等等……然而,当我试图运行一个只需要一个文件的简单模块,并运行一个只返回参数的函数时,node没有正确输出结果。我的意思是,它有时只返回值,有时不返回值。

我是新手,所以我可能是错的,但据我所知,这是节点(?)中的异步。但在研究过程中,我只在使用async的列表中找到了执行加载、等待、超时等操作的函数。但是似乎我在node中运行的所有东西,无论多么简单,都是异步运行的,并且不会一致地输出值?以下是我在节点控制台中运行和接收到的内容的示例:

代码语言:javascript
运行
复制
> function test(input){
... return input;
... }
> test('a')

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

> test(5)
5
>

就像我说的,我正在努力学习一些东西,但它是从查看模块开始的,所以我也想知道一个常见的“模式”(?)用于处理此问题的方法是,在导出模块时。谢谢。

编辑:

我不确定我是否说得很清楚,但在大多数情况下,我真的只是想知道为什么像这样简单的函数不能工作,而我看到人们谈论异步的唯一函数是明显在等待的函数,在某种意义上。不是像这样的简单函数。我还没有尝试用这个回调,但我假设它是有效的。我只是不认为你需要它们来完成这么简单的功能?

EN

回答 3

Stack Overflow用户

发布于 2017-03-30 02:26:22

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

代码语言:javascript
运行
复制
> function test(input){
... return input;
... }
undefined
> test('a')
'a'
> test('a')
'a'
> test(5)
5
> test(5)
5
>

在您的示例中,test()函数不是异步的。它同步返回值。不过,您包含的REPL会话看起来并不合理,因为您的函数定义应该像我的示例中那样返回undefined

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

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

票数 0
EN

Stack Overflow用户

发布于 2017-03-30 03:16:07

使用像这样的东西

代码语言:javascript
运行
复制
function test(input,callback){
 return callback(input);
}

test('a',function(s){console.log(s)})
票数 0
EN

Stack Overflow用户

发布于 2017-03-30 02:41:08

根据您的问题,您正在使用的函数不是异步函数,也不会模拟异步操作。它会一直阻塞,直到返回结果。

不要被cli返回的结果搞糊涂了;有时候出现这种情况是很正常的。然而,异步操作用于提取节点中的长时间运行的操作,诸如数据库请求、文件i/o请求、在线信息请求等,其在稍后时间返回信息。

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

您可能想要阅读beginning node js

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43101054

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档