将对象从 SQL 查询函数传递到单独的函数

Pass object from SQL query function to a separate function

我是 node 和 promises 的新手。我有两个文件 - server.jsdb.js

server.jsdb.js 作为模块导入。

我正在从 db.js 模块中的 SQL 数据库中获取一些数据,并试图将该数据传递给 server.js 中的函数。 我已成功从数据库中获取数据,但是当我尝试将其传递给 server.js 中的函数时,它只有 returns 一个 undefined 值。

代码如下

server.js

const db = require('./db.js');

app.post('/api/trigger-push-msg/', function (req, res) {
  return getSubscriptionsFromDatabase()
  .then(function(subscriptions) {

    // Do something

  });
});

function getSubscriptionsFromDatabase() {
  return new Promise((resolve, reject) => {
    let subscriptions = db.getSubscriptions();

    console.log(subscriptions);  // this only prints "undefined"

    if (subscriptions != undefined) {
      resolve(subscriptions);
    } else {
      reject("No");  // this executes
    }
  })
}

db.js

module.exports = {
  getSubscriptions: function() {
    var sql = "SELECT * FROM subscriptions";

    con.query(sql, function(err, result) {
      if (err) throw err;
      console.log(result);  // this prints the same result as I want
      return result;
    })
  }
}

getSubscriptions 没有 return 语句

考虑到其中有一些异步内容,您应该将所有内容包装在一个 promise 中,并仅在它解析后触发后续逻辑。

module.exports = {
  getSubscriptions: function() {
    var sql = "SELECT * FROM subscriptions";
    return new Promise(function(resolve, reject){
      con.query(sql, function(err, result) {
        if (err) return reject(err);
        resolve(result);
      })
    })
  }
}

然后:

function getSubscriptionsFromDatabase() {
  return db.getSubscriptions()
  .then(function(subscriptions){
     return subscriptions;
   })
}

在你的路线中:

app.post('/api/trigger-push-msg/', function (req, res) {
 getSubscriptionsFromDatabase()
  .then(function(subscriptions) {
    res.send(subscriptions);
  })
  .catch(function(err){
    res.sendStatus(500);
  })
});