javascript - 将额外变量传递给回调函数

标签 javascript mongodb mongoose error-handling callback

我正在尝试创建一个简单的方法,在控制台中以美化的格式记录我的数据库操作结果。我想在我的数据库完成操作时将一个额外的变量 (operationName) 传递给我的自定义记录器回调函数。

// Custom logger (simplified)
const dbLogger = (error, data, operationName) => {
  if (error) {
    console.log(`${operationName} failed`, error)
  }
  console.log(`${operationName} success`, data)
}

// mongodb operations
import ChatModel from 'somewhere';

function createMessage() {
  const newChatAdded = new ChatModel({
    message: 'Hi'
  })
  ChatModel.save(newChatAdded, dbLogger);
}

我们回调中的错误数据是由ChatModel.save方法提供的,但我想发送第三个参数operationName(例如“保存”或“删除”)。

最佳答案

两种方式,任君选择!

  1. 使用带有 rest parameter 的匿名函数和 spread这些在调用 dbLogger 时:

    ChatModel.save(newChatAdded, (...args) => dbLogger(...args, "save");
    
  2. 使用 bound function :

    更改您的 dbLogger 函数签名以接受 operationName 作为第一个参数:

    const dbLogger = (operationName, error, data) => {
      if (error) {
        console.log(`${operationName} failed`, error)
      }
      console.log(`${operationName} success`, data)
    }
    

    创建新的绑定(bind)日志函数,该函数将始终以“save”作为第一个参数调用。

    ChatModel.save(newChatAdded, dbLogger.bind(null, "save");
    

    这也称为 "partial application" .

关于javascript - 将额外变量传递给回调函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56254292/

相关文章:

javascript - 链接到 HTML 文档中的 href 时如何使用 javascript 偏移量?

JavaScript/HTML5/jQuery 拖放上传 - "Uncaught TypeError: Cannot read property ' 文件的未定义”

mongodb - 与MongoDB go client一起使用时bson struct tag的必要性

mongodb - MongoDb 聚合中的条件展开?

node.js - 如何在nestjs中加入两个模式?

java - 如何将Java对象绑定(bind)到Javascript控件

javascript - 如何找到 DOM 中具有 z-index 值的所有元素

database - Mongoose 错误: The MongoDB server disallows overwriting documents using `updateOne`

linux - 使用 Linux shell 脚本向 mongodb 添加值

node.js - 尝试使用mongosastic Elasticsearch 到Node app时出现mapper_parsing_exception