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(getEmployeesgetEmployees)来访问数据库。让我对这两个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);
    });
}