Javascript函数回调
我正在浏览下面的代码,无法理解调用每个方法时在幕后发生了什么。这两种方法是如何相互作用的Javascript函数回调,javascript,function,callback,Javascript,Function,Callback,我正在浏览下面的代码,无法理解调用每个方法时在幕后发生了什么。这两种方法是如何相互作用的 var employeeDb = require('../database/employees'); exports.getEmployees = getEmployees; exports.getEmployee = getEmployee; function getEmployees(callback) { setTimeout(function() { callback(nu
var employeeDb = require('../database/employees');
exports.getEmployees = getEmployees;
exports.getEmployee = getEmployee;
function getEmployees(callback) {
setTimeout(function() {
callback(null, employeeDb);
}, 500);
}
function getEmployee(employeeId, callback) {
getEmployees(function(error, data) {
if (error) {
return callback(error);
}
var result = data.find(function(item) {
return item.id === employeeId;
});
callback(null, result);
});
}
有人能详细解释一下吗
var employeeDb = require('../database/employees');
从。/数据库/employees
导出的内容现在分配给employeeDb
我们选择将下面的
getEmployee
和getEmployee
方法导出到我们当前正在处理的文件所需的任何文件。由于函数的提升,这两种方法已经存在于JavaScript引擎中
将执行传递到getEmployees
的任何回调函数。。。。至少通过500毫秒后。该函数必须为null
和employeeDb
(从第一行的require
语句中)
如果这是Node.js代码,通常会将null
传入回调以指示“我们没有遇到错误!”
此函数接受employeeId
和callback
函数。函数说,“嘿,getEmployees()
,请立即运行,但当您完成后,执行我给您的这个匿名函数作为您的唯一参数。”getemployeeds()
设置一个500毫秒计时器,一旦500毫秒过期,它决定运行我们的匿名函数,给它null
和employeeDb
我们的匿名函数接受null
作为var error
(来自参数)和employeeDb
作为var数据
(来自参数)。由于null
已提供给我们,因此if(error){}
条件失败,允许我们转到var result…
代码行
那var result…
代码行说:“嘿data
,请运行find
方法,并对匿名函数执行您应该执行的任何操作。无论它是在您完成时运行(也称为异步),还是多次同步运行(如forEach
循环)。”
如果data.find()
如果data.find()
是一个同步操作,那么最初作为参数传入的任何回调都将被执行为:“嘿,我们没有错误,所以让我给你null
,让你知道……哦,还有结果,我得到了,再见!”这段代码似乎是一种模拟代码,它模拟了一些服务器端API(getEmployees和getEmployees)来访问数据库。让我对这两个API函数进行一个非常简短的逻辑解释:
getEmployees(回调)
此函数使用setTimeout函数模拟服务器端通信中的延迟。调用此函数时,500毫秒后调用参数回调,其中包含两个参数:错误和员工数据库(employeeDb)对象
getEmployee(employeeId,回调)
调用此函数可查找具有给定id(employeeId)的员工具有回调机制。API使用以前的服务器端访问API并将回调传递给它。每当服务器通过回调返回数据时,它都会调用getEmployee API推送的数据库对象的find方法。当找到具有给定id的员工时,结果会通过回调机制返回。I在这段代码中,假设在查找操作过程中没有生成错误。如果您能详细解释问题所在,会有很大帮助。您理解和不理解哪些部分?在您发布的代码中,由于这两个函数都没有被调用,所以什么都没有发生。这是Node.js应用程序中的示例代码。Exports是一个模块,有两个方法附加到该模块,并在employees.js文件中公开。我无法理解回调函数是如何被调用的。其次,getEmployee能够访问getEmployees?为什么我的问题被否决了?我认为这是一个真正的问题。是的,在getEmployee()中
有一个对getEmployees()
的调用,一个匿名函数作为参数传递。该匿名函数是getEmployees()
的回调
参数。
exports.getEmployees = getEmployees;
exports.getEmployee = getEmployee;
function getEmployees(callback) {
setTimeout(function() {
callback(null, employeeDb);
}, 500);
}
function getEmployee(employeeId, callback) {
getEmployees(function(error, data) {
if (error) {
return callback(error);
}
var result = data.find(function(item) {
return item.id === employeeId;
});
callback(null, result);
});
}