Javascript函数回调

时间:2016-12-25 19:46:48

标签: javascript function callback

我正在浏览以下代码,并且无法理解在调用每个方法时幕后发生的事情。两种方法如何相互作用?

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);
    });
}

任何人都可以详细解释一下吗?

2 个答案:

答案 0 :(得分:0)

Staff

var employeeDb = require('../database/employees'); 导出的内容现在已分配给../database/employees

employeeDb

我们选择将我们的exports.getEmployees = getEmployees; exports.getEmployee = getEmployee; getEmployees方法从下面导出到我们当前正在处理的文件getEmployee。由于函数提升,这两种方法已经存在于JavaScript引擎的眼中。

require

传递到function getEmployees(callback) { setTimeout(function() { callback(null, employeeDb); }, 500); } 的任何回调函数将在至少500ms过后执行....该函数必须期望getEmployeesnull(来自第一行的employeeDb语句)。

如果这是Node.js代码,通常会将require传入回调以指示“我们遇到了没有错误!”。

null

此功能接受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); }); } employeeId功能。该函数说,'嘿callback,请立即运行,但是当你完成后,执行这个匿名函数我给你作为唯一的参数。 getEmployees()设置一个500毫秒的计时器,一旦500毫秒到期,它决定通过给它getEmployees()null来运行我们的匿名函数。

我们的匿名函数接受employeeDbnull(来自参数),var erroremployeeDb(来自参数)。自var data提供给我们后,null条件失败,允许我们转到if(error){}代码行。

var result...代码行说:“嘿var result...,请运行您的data方法,并执行您应该对匿名函数执行的操作..是否是在你完成时运行它(也就是异步),或者它是否同步运行多次(如find循环)。“

如果forEach是异步操作,那么您的data.find()就在错误的位置。

如果callback(null, result是一个同步操作,那么最初作为参数传入的回调将被执行为:“嘿,我们没有错误,所以lemme给你data.find()代替所以你知道那......而且哦,这也是null我得到的,再见!“

答案 1 :(得分:0)

此代码似乎是一种模拟代码,它模拟了一些可以访问数据库的服务器端API( getEmployees getEmployee )。让我对这两个API函数给出一个非常简短的逻辑解释:

装getEmployees(回调)

此功能使用 setTimeout 功能模拟服务器端通信的延迟。调用此函数时,参数 callback 在500毫秒后调用两个参数; 错误员工数据库(employeeDb)对象。

getEmployee(employeeId,callback)

调用此函数以查找具有给定id( employeeId )且具有回调机制的员工。 API使用先前的服务器端访问API并将回调传递给它。每当服务器通过回调返回数据时,它就会调用getEmployee API推送的数据库对象的find方法。找到具有给定id的员工后,结果将通过回调机制返回。在此代码中,假设在 find 操作期间没有生成错误。