需要帮助理解如何在回调函数中定义参数,使用这个例子(如果可能的话)
Wanted help in understanding how parameters are defined in Callback functions, using this example (if possible)
我想更多地了解回调函数在 JavaScript 中的工作原理。
我在网上找到了这个简单的示例代码,在添加导入和附加 txt 文件后它可以正常工作。但是我不确定为什么它可以工作,因为函数的参数没有在任何地方定义?
fs.readFile(`${__dirname}/temp.txt`, (err, data) => {
console.log(`Breed: ${data}`);
superagent.get(`https://dog.ceo/api/breed/${data}/images/random`).end((err,res) =>{
console.log(res.body)
}); })
在 运行 之后,我在控制台上得到了预期的结果,其中一行显示 Breed: ${data}
,下一行显示 res
.
的正文
然而,err
、data
参数从未提供给readFile中的箭头函数。 err
、res
参数都没有 called/provided 向控制台显示消息的值,那么这些行如何向控制台显示消息?
如果 .readFile
returned a err
and data
value & .end
returned a err
和 res
值,但是在阅读文档后这两个函数 return void
,因此我很困惑,我们将不胜感激。
您将函数传入 readFile,稍后 readFile 将调用您的函数。当它调用你的函数时,readFile 会传入相关的值。
您可以自己做类似的事情,例如:
function myReadFile(filename, callback) {
setTimeout(() => {
if (Math.random() > 0.5) {
callback(null, 'fake file');
} else {
callback('an error', null);
}
}, 1000);
}
myReadFile(`${__dirname}/temp.txt`, (err, data) => {
console.log(`Breed: ${data}`);
})
(虽然真正的 readFile 函数当然不是执行超时或随机数,而是从文件中读取并侦听该操作是否成功或出错)
我想更多地了解回调函数在 JavaScript 中的工作原理。
我在网上找到了这个简单的示例代码,在添加导入和附加 txt 文件后它可以正常工作。但是我不确定为什么它可以工作,因为函数的参数没有在任何地方定义?
fs.readFile(`${__dirname}/temp.txt`, (err, data) => {
console.log(`Breed: ${data}`);
superagent.get(`https://dog.ceo/api/breed/${data}/images/random`).end((err,res) =>{
console.log(res.body)
}); })
在 运行 之后,我在控制台上得到了预期的结果,其中一行显示 Breed: ${data}
,下一行显示 res
.
然而,err
、data
参数从未提供给readFile中的箭头函数。 err
、res
参数都没有 called/provided 向控制台显示消息的值,那么这些行如何向控制台显示消息?
如果 .readFile
returned a err
and data
value & .end
returned a err
和 res
值,但是在阅读文档后这两个函数 return void
,因此我很困惑,我们将不胜感激。
您将函数传入 readFile,稍后 readFile 将调用您的函数。当它调用你的函数时,readFile 会传入相关的值。
您可以自己做类似的事情,例如:
function myReadFile(filename, callback) {
setTimeout(() => {
if (Math.random() > 0.5) {
callback(null, 'fake file');
} else {
callback('an error', null);
}
}, 1000);
}
myReadFile(`${__dirname}/temp.txt`, (err, data) => {
console.log(`Breed: ${data}`);
})
(虽然真正的 readFile 函数当然不是执行超时或随机数,而是从文件中读取并侦听该操作是否成功或出错)