我在理解javascript中回调的规则时遇到了麻烦。我知道回调在函数x完成后运行,但是我发现在定义它们的时候有歧义。
在node.js的文档中。https:/nodejs.orgenknowledgegetting-startedcontrol-flowwhat-are-callbacks。
代码
function processData () {
var data = fetchData ();
data += 1;
return data;
}
改为
function processData (callback) {
fetchData(function (err, data) {
if (err) {
console.log("An error has occurred. Abort everything!");
return callback(err);
}
data += 1;
callback(data);
});
}
当创建匿名函数时,为什么我们可以使用参数,这些参数从哪里来,这些参数的规则是什么?
这个问题的背景来自于socket.io库具体来说。
var io = socket(server);
io.on('connection', function(socket){}
为什么我们可以引用socket,我可以直接在function(random_param, socket)中添加吗?传递random_param的时候怎么告诉函数要引用?
有人告诉我读文档,我已经读过了,但这并没有让事情变得更清楚。
先谢谢你。
我知道回调是在函数x完成后运行的。
不一定。JavaScript标准库(和其他各种库)有很多非异步回调。想想数组函数的回调吧 forEach
, map
, sort
...
...当匿名函数被创建时,为什么我们可以使用参数,这些参数从哪里来,这些参数的规则是什么?
它们来自于调用回调的代码。在你的例子中,你使用的socket.io库中的代码调用回调时有两个参数,你的回调在参数中接收到了 err
和 data
.
这里有一个有点傻的例子。一个函数调用一个随机数的回调。
// This is analogous to the code in the socket.io library
function getARandomNumberWithRandomDelay(callback) {
setTimeout(() => {
callback(Math.random());
}, Math.random() * 1000);
}
// This is analogous to your code using the socket.io library
getARandomNumberWithRandomDelay(function(num) {
console.log("I got the number " + num);
});