【问题标题】:Promise resolving undefined, but data is still POSTED承诺解决未定义,但数据仍在发布
【发布时间】:2020-11-22 22:13:25
【问题描述】:

我正在尝试将数据发布到我的本地 sqlite 数据库。 POST 后数据出现在我的数据库表中,但Promise.resolve() 返回为undefined,这又不会将结果返回给客户端。我错过了什么吗?

任何帮助将不胜感激。这是我得到的。

module.exports.addAccount = function (data) {

const db_conn = new sqlite3.Database( path.join(__dirname, "../user_database.sql") )

return new Promise( function (resolve, reject) {

   db_conn.serialize( function () {
     // insert row
     db_conn.run("INSERT INTO some_table (username) VALUES (?);", [data.username], function (err,rows) {

            if (!err) {
                console.log(rows) // always returns undefined

                resolve([rows, this.lastID])
            } else {
                reject(err)
            }

         })
     })
    db_conn.close()
  })

}

然后:

app.post("/add-row", function (req, res) {
user_info.addAccount(req.body).then( function(response) {
    
    res.json({
        rows: response[0], // this is undefined
        row_id: response[1] // this is not
    })
}).catch(function () {

})
})

【问题讨论】:

  • 你希望 promise 解决什么问题?你插入的值?但是你已经知道了,因为你提供了这些值......你唯一需要知道的是它是否成功。
  • @trincot -- 那么,您认为我可以在当前行中运行另一个db.run 来获取刚刚插入的行吗?因为它仍然会在同一个连接上。
  • 您为什么要这样做?您刚刚使用了带有您知道的值的 INSERT。那么为什么您需要再次获取这些信息?
  • @trincot 我想从数据库中获取它。我需要从数据库中获取一些我不知道的东西。
  • 我不明白。我在你的代码中没有看到。请在你的问题中具体。数据库中有什么你不知道的?

标签: javascript node.js sqlite express electron


【解决方案1】:

这可能会解决您的问题:

db_conn.run("INSERT INTO some_table (username) VALUES (?);", ['string'], function (err) {
  if (!err) {
    db_conn.get("SELECT * FROM some_table WHERE rowid=?", [this.lastID], function(err, rows) {
      db_conn.close()
      resolve([rows])
    })
  } else {
    reject(err)
  }
})

我假设rowid 但也许你的表有另一个主键。我还建议采用 async/await 而不是 Promise 等待您的查询完成后再关闭连接。

【讨论】:

  • 是的!大约一个小时前我这样做了,它起作用了,只是我关闭了Promise.finally() 的连接。 --> link.
猜你喜欢
  • 1970-01-01
  • 2017-10-10
  • 2022-01-27
  • 2020-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-03
  • 2018-12-06
相关资源
最近更新 更多