Как использовать обработчик ответа для результатов обещания - PullRequest
0 голосов
/ 18 октября 2018

У меня есть два метода, которые имеют общую логику ответа, и я попытался извлечь эту логику ответа другому методу и связать ее со всеми обещаниями, но выдал ошибки:

Исходные методы:

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

Что я пытался сделать? (Извлечь обещание ответа для другого распространенного метода)

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

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Ссылочная ошибка: responseMethod не определен

Ваша ошибка связана с ключевым словом this в javascript, а не с асинхронным компонентом.

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

Надеюсь, это поможет.Cheers,

0 голосов
/ 18 октября 2018

Я нашел, как исправить этот сценарий:

Ответ ниже:

fix # 1: res в качестве параметра вМетод response

fix # 2 : возврат обещания в методе response

responseMethod: function (res, promise) {
    return 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(res, db.getData(req))
  },
  method2: function (req, res) {
    responseMethod(res, db.getData2(req))
  },
...