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

时间:2019-05-22 10:04:11

标签: 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方法提供,但我想发送一个额外的字符串(例如“保存”)也是

2 个答案:

答案 0 :(得分:2)

两种方法,请选择!

  1. 在调用dbLogger时将匿名函数与rest parameterspread一起使用:

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

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

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

    这也称为"partial application"

答案 1 :(得分:1)

ChatModel.save(newChatAdded, (error, data) => dbLogger(error, data, 'save'));

如果您要更改参数的顺序,则可以使其更加简洁:

const dbLogger = (operationName, error, data) => ...

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