我能指望每次调用doSomething()时完成的nodeID映射吗?
nodeIDs = $.map(nodeIDs, function(n){
return n.match(/\d+$/);
});
doSomething(nodeIDs);
我以为node.js中的所有回调都是异步的?我确实读过一篇关于通用编程的文章,说回调可以是同步的,但是我不确定node.js吗?
JavaScript也是一种功能编程语言。您在这里拥有的是“高阶函数”,该函数将函数作为参数。高阶函数是同步的(但请参见下面的注释)。
资料来源:
map()
是高阶函数的典型示例。它接受一个函数并将其应用于数组的所有元素。这个定义听起来很“实用”。Node也未提供此功能。它由MDN
Array.prototype.map()记录
,并由ECMAScript
5.1
指定。
要回答您的问题:是,在应用所有元素 之后*doSomething(nodeIDs)
将调用。 *
注意:
高阶函数是功能编程的概念。JavaScript是功能性的,但在浏览器内部或服务器上执行代码的实用性方面也深深扎根。我要说的是,setTimeout()
即使它以函数作为参数,setTimeout()
也不是一个高阶函数,因为它不是真正的纯函数,因为它使用时间。纯功能是永恒的。例如,的结果map()
不依赖于时间。这就是这个问题的实质所在。如果某些事情不依赖于时间,则可以同步执行它。问题解决了。
感谢Simon挑战JavaScript中高阶函数的定义。
问题内容: https://nodejs.org/api/fs.html#fs_fs_createreadstream_path_options。我也有一个一般性的问题。 我是否可以假设,除非文档中另有说明,否则提及的任何函数都是异步的? 问题答案: createreadstream是异步的吗? 是的,没有。这个问题实际上是一个语义问题,而不是任何问题,因为它在同步外观界面下隐藏了一个异步操作。
我希望我的请求触发一些长时间运行的操作,这些操作应该在后台执行。我编写了以下实现,应该在后台处理我的操作,但实际上我的请求是同步执行的: 在日志中,我看到以下内容: 我看到我的在另一个线程中执行,但出于某种原因,我的原始请求等待sleep完成 更新1:
问题内容: 是功能异步? 问题答案: 不,所有呼叫都是同步的。
我目前正在阅读Trevor Burnham的Async Javascript。到目前为止这是一本很棒的书。 他谈到这个片段和console.log在Safari和Chrome控制台中是“异步”的。不幸的是我无法复制这个。代码如下: 如果这是异步的,我会预期结果是books的结果。将console.log()放在事件队列中,直到所有代码执行完毕,然后运行它,它将具有bar属性。 虽然它是同步运行的,
问题内容: 我想知道是否应该在我的网站上使用异步调用。我知道要明确指定我需要使用的 但是起初我尝试使用,尽管服务器必须返回很多信息,但是我的浏览器没有卡死,并且可以毫无问题地导航。 我在网上搜索了一下,但是我仍然不确定100%两者之间的区别。 如果是异步的,那有什么意义呢?如果不是,那么再次看到我的导航没有问题,使用的目的是什么? 提前致谢 问题答案: 是的,是异步的。从文档中: 这是Ajax的简
问题内容: 是在node.js中- 异步?我的意思是javascript代码执行将停止,直到将东西打印在屏幕上,还是将在以后打印? 另外,我有兴趣知道console.log是否有可能在语句崩溃后立即不显示任何内容。 问题答案: 更新: 从Node 0.6开始,此帖子已过时,因为stdout 现在是 同步的 。 好吧,让我们看看实际是什么。 首先,它是控制台模块的一部分: 因此,它只是进行一些格式化