Как передать объект запроса через цепочку обещаний - PullRequest
0 голосов
/ 28 апреля 2020

Я пытаюсь получить объект запроса как часть оператора then, используя пакет Node.js mssql.

Однако, когда я пытаюсь выйти из системы, он не определен.

exports.someFunction = (proc, req, res) => {
  sql.connect(config.properties).then((pool, req) => {
    return pool.request()
      .execute(proc)
      .then((response, req) => {
        console.log(req) // undefined
    })
  }

Как передать объект запроса в оператор then для сравнения?

Ответы [ 2 ]

0 голосов
/ 28 апреля 2020

Если вы хотите сохранить область действия, возможно, лучшим способом было бы написать это как async / await:

exports.someFunction = async (proc, req, res) => {
  const pool = await sql.connect(config.properties)
  const result = await pool.request().execute(proc)
  console.log(result, req) // both retain scope
})

}

Но я думаю, что причина, по которой req не определена в ваш console.log потому что в:

sql.connect(config.properties).then((pool, req) => {

Вы ожидаете, что req будет передан вам в результате .then() (это теневая переменная). Если вы удалите его отсюда и другой .then(), то он также должен работать

0 голосов
/ 28 апреля 2020

Вы определили три отдельных аргумента функции как req, поэтому они все скрывают друг друга, и вы попытались объявить 2-й параметр для обработчика .then(), который не существует, поэтому, конечно, это будет undefined.

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

exports.someFunction = (proc, req, res) => {
  return sql.connect(config.properties).then((pool) => {
    return pool.request()
      .execute(proc)
      .then((response) => {
        console.log(req) // can directly access the req in the parent scope
        // do something with `req` here
    })
  }
...