首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >回调函数-快速MDN教程

回调函数-快速MDN教程
EN

Stack Overflow用户
提问于 2021-07-07 18:44:19
回答 1查看 141关注 0票数 1

因为我目前正在学习用express/Node进行编码,以便进行进化(习惯于C和PHP/MySQL.)我已经完成了关于快递的MDN教程,它做得很好,而且每件事都很直接;多亏了Mozilla的教学团队,我的人事项目即将完成。

但是,这里有一点我仍然无法理解,因为我仍然无法适应回调函数的使用。处理异步执行时间的要点是,在本教程中使用MongoDB和mongoose,可以通过直接使用回调函数(如创建架构的实例),分两步或一次执行查询:

代码语言:javascript
复制
// 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!
});

代码语言:javascript
复制
SomeModel.create({ name: 'also_awesome' }, function (err, awesome_instance) {
  if (err) return handleError(err);
  // saved!
});

但是,在用数据填充DB的JS脚本中,似乎使用了这两种语法,下面是一个示例:

代码语言:javascript
复制
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)
  }  );
}

困扰我的是

  • "cb“从来没有定义过,如果我删除函数中”已定义的“参数中的所有回调以及它们各自调用
  • 的所有回调,脚本的工作方式是相同的-- cb(null,author)的意义:不需要返回数据,它们被推送到声明的数组,同时保存到DB。

完整的脚本可以在这里找到:https://raw.githubusercontent.com/hamishwillee/express-locallibrary-tutorial/master/populatedb.js

感谢那些花时间阅读和回答我的人,

提亚戈

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-08 02:45:49

欢迎来到堆栈

在Js世界中,函数可以视为变量,函数是字符串、数字…等变量的类型。等等,这可能会把你弄糊涂。回调只是一个具有变量(参数)名称…的函数。现在,斯威夫特语言也实现了这种模式。

JS中的函数可以作为参数发送到其他函数,也可以返回。

函数调用者发送的回调参数,就像发送给的任何其他变量一样,称为函数,但作为函数…发送。

你可以把它命名为cb或者其他什么…cb参数是一个函数,它意味着当您试图在内部使用它,称为函数时,它可能也需要像cb(null, author)一样的参数。现在假设cb只是从调用方发送到调用方函数的类型函数的一个变量。而cb本身作为一个函数必须接收参数。

我知道这很让人困惑,尤其是如果cb也被退回的话。

有时回调不接收任何参数,同样,您可以将它们称为任何类似回调或cb的约定。通常它们是最后一个参数,作为约定的…。它只是需要一些想象力来理解这个令人困惑的参数是如何进出…的。

在被调用的函数中,如果您没有使用回调,那么删除它不会影响代码,因为您不会检查错误。但是在节点世界中,回调通常是很重要的,因为它会在您完成所做的事情之后做一些事情。

我希望这个简单的例子能澄清你被问到的问题,因为它让我很像你。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68291582

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档