javascript - 如何使用 promise 结果的响应处理程序

标签 javascript node.js promise httpresponse

我有两个具有共同响应逻辑的方法,我试图将该响应逻辑提取到另一个方法并链接到所有 promise ,但确实抛出了错误:

原始方法:

  method1: function (req, res) {
    db.getData(req)
      .then(data => {
          res.status(200).send({ status: 200, data: data })
      })
      .catch(error => {
        res.status(500).send({ status: 500, statusText: error.message })
      })
  },
  method2: function (req, res) {
    db.getData2(req)
      .then(data => {
          res.status(200).send({ status: 200, data: data })
      })
      .catch(error => {
        res.status(500).send({ status: 500, statusText: error.message })
      })
  },

我尝试做什么? (将response promise提取到另一种常用方法)

responseMethod: function (promise) {
    promise
      .then(data => {
        res.status(200).send({ status: 200, data: data })
      })
      .catch(error => {
        res.status(500).send({ status: 500, statusText: error.message })
      })
  },
  method1: function (req, res) {
    responseMethod(db.getData(req))
  },
  method2: function (req, res) {
    responseMethod(db.getData2(req))
  },

错误:

Reference Error: responseMethod is not defined

最佳答案

Reference Error: responseMethod is not defined

您的错误与 javascript 中的 this 关键字有关,与任何异步内容无关。

const containerObj = {
  responseMethod: function() {
    return 'ok'                  // simplified for testing
  },
  method1: function() {
    return this.responseMethod() // succeeds because it references 'this' object
  },
  method2: function() {
    return responseMethod()      // fails because you need to reference 'this'
  },
}

/* TESTS */
console.log(containerObj.method1()) // should succeed
console.log(containerObj.method2()) // should fail

希望这对您有所帮助。 干杯,

关于javascript - 如何使用 promise 结果的响应处理程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52865589/

相关文章:

javascript - CKEditor 工具栏配置不起作用

javascript - 如何从 Twitter API 获取单独的主题标签? (在javascript中使用json)

javascript - 使用 Promises 时卡在变量上的最佳实践

node.js - PayPal REST API - RATE LIMIT REACHED 错误

javascript - 从使用 .then() 的 Promise 转换为 async/await

javascript - 使用 promise.all 返回一个 promise

javascript - 针对 NodeList 调用 Array.prototype.slice 的目的是什么?

javascript - Flowtype - 字符串与字符串枚举不兼容

javascript - 将数组对象键值对属性转换为单个键值对并再次将其插入数组

javascript - 为什么 Formidable `form.parse` 回调没有在 Express 中运行?