【发布时间】:2015-07-05 04:26:25
【问题描述】:
语法的哪一部分提供了该函数应该在其他线程中运行并且是非阻塞的信息?
让我们考虑 node.js 中的简单异步 I/O
var fs = require('fs');
var path = process.argv[2];
fs.readFile(path, 'utf8', function(err,data) {
var lines = data.split('\n');
console.log(lines.length-1);
});
究竟是什么让它发生在后台?任何人都可以准确地解释它或粘贴一些好的资源的链接吗?在我所见之处,到处都有大量关于什么是回调的信息,但没有人解释为什么它实际上是这样工作的。
这不是关于 node.js 的具体问题,而是关于每种编程语言中回调的一般概念。
编辑:
我提供的示例在这里可能不是最好的。所以我们不要考虑这个node.js代码sn-p。我一般问 - 是什么让程序在遇到回调函数时继续执行的技巧。语法是什么 这使得回调概念成为非阻塞概念?
提前致谢!
【问题讨论】:
-
你已经有了答案,但你也可以阅读javascript callback : functions are objects
-
无法一概而论。回调在被调用时运行,这完全取决于您将回调传递给什么,与语言无关。
-
您发布的代码中没有任何内容与异步处理有关。事实上,JavaScript 不是一种多线程语言,因此您永远无法真正“在后台触发某些事情”。但是,您可以通过使用诸如
Q之类的第三方库来模拟异步行为,这些库可以轻松创建承诺链。一些核心节点函数可能在不同的线程上运行,但您无权访问它们,也无法控制它们的行为。 -
JavaScript 的语法中没有任何内容定义同步与异步。
-
也许问这个问题的另一种方式是......如果我想编写一个简单的 JavaScript 函数,它接受另一个函数作为参数并在不阻塞调用者的情况下调用该函数,我将如何编写它?
标签: javascript node.js asynchronous callback