因为我目前正在学习用express/Node进行编码,以便进行进化(习惯于C和PHP/MySQL.)我已经完成了关于快递的MDN教程,它做得很好,而且每件事都很直接;多亏了Mozilla的教学团队,我的人事项目即将完成。
但是,这里有一点我仍然无法理解,因为我仍然无法适应回调函数的使用。处理异步执行时间的要点是,在本教程中使用MongoDB和mongoose,可以通过直接使用回调函数(如创建架构的实例),分两步或一次执行查询:
// Create an instance of model SomeModel
var awesome_instance = new SomeModel({ name: 'awesome' });
// Save the new model instance, passing a callback
awesome_instance.save(function (err) {
if (err) return handleError(err);
// saved!
});或
SomeModel.create({ name: 'also_awesome' }, function (err, awesome_instance) {
if (err) return handleError(err);
// saved!
});但是,在用数据填充DB的JS脚本中,似乎使用了这两种语法,下面是一个示例:
function authorCreate(first_name, family_name, d_birth, d_death, cb) {
authordetail = {first_name:first_name , family_name: family_name }
if (d_birth != false) authordetail.date_of_birth = d_birth
if (d_death != false) authordetail.date_of_death = d_death
var author = new Author(authordetail);
author.save(function (err) {
if (err) {
cb(err, null)
return
}
console.log('New Author: ' + author);
authors.push(author)
cb(null, author)
} );
}困扰我的是
完整的脚本可以在这里找到:https://raw.githubusercontent.com/hamishwillee/express-locallibrary-tutorial/master/populatedb.js
感谢那些花时间阅读和回答我的人,
提亚戈
发布于 2021-07-08 02:45:49
欢迎来到堆栈
在Js世界中,函数可以视为变量,函数是字符串、数字…等变量的类型。等等,这可能会把你弄糊涂。回调只是一个具有变量(参数)名称…的函数。现在,斯威夫特语言也实现了这种模式。
JS中的函数可以作为参数发送到其他函数,也可以返回。
函数调用者发送的回调参数,就像发送给的任何其他变量一样,称为函数,但作为函数…发送。
你可以把它命名为cb或者其他什么…cb参数是一个函数,它意味着当您试图在内部使用它,称为函数时,它可能也需要像cb(null, author)一样的参数。现在假设cb只是从调用方发送到调用方函数的类型函数的一个变量。而cb本身作为一个函数必须接收参数。
我知道这很让人困惑,尤其是如果cb也被退回的话。
有时回调不接收任何参数,同样,您可以将它们称为任何类似回调或cb的约定。通常它们是最后一个参数,作为约定的…。它只是需要一些想象力来理解这个令人困惑的参数是如何进出…的。
在被调用的函数中,如果您没有使用回调,那么删除它不会影响代码,因为您不会检查错误。但是在节点世界中,回调通常是很重要的,因为它会在您完成所做的事情之后做一些事情。
我希望这个简单的例子能澄清你被问到的问题,因为它让我很像你。
https://stackoverflow.com/questions/68291582
复制相似问题