gpt4 book ai didi

mysql - promise 自定义方法

转载 作者:行者123 更新时间:2023-11-28 23:24:52 25 4
gpt4 key购买 nike

我是 Node 和 JS 世界的新手。我正在尝试实现的是“模块化”我的查询并在各种场景中重用它们。这是我的数据库管理器:

'use strict'

const mysql = require('mysql')
var Promise = require('bluebird')
var using = Promise.using
Promise.promisifyAll(require('mysql/lib/Connection').prototype)
Promise.promisifyAll(require('mysql/lib/Pool').prototype)
const config = require('./config')

var pool = mysql.createPool({
connectionLimit: 100,
host: config.dbHost,
user: config.dbUser,
password: config.dbPassword,
database: config.db,
debug: config.dbDebug
})

var getConnection = function () {
return pool.getConnectionAsync()
.disposer(function (connection) {
return connection.release()
})
}

var query = function (command) {
return using(getConnection(), function (connection) {
return connection.queryAsync(command)
})
}

module.exports = {
query: query
}

在一个单独的文件中,我想调用一个查询并根据该查询的结果然后调用另一个(第二个使用第一个的结果值):

utils.method1()
.then(function (value) {
utils.method2(value)
})
.catch(function (error) {
console.error('Error while retrieving product id: ' + error)
res.json({ data: error })
})

如何“ promise ”我的方法? 更重要的是:这是分隔 mySQL 查询的正确方法吗?您能推荐一些最佳做法吗?

为了完整起见,这是我执行查询的方法 1:

module.exports = {
method1: function () {
// ...sql
db.query(mysql.format(sql, params))
.then(function (results) {
return results[0].id // clearly this is not a promise
})
.catch(function (error) {
console.error('Error while retrieving...: ' + error)
res.status(500).send('Internal server error')
})
}
}

最佳答案

你实际上离 promise 很近:)

当然,results[0].id 不是 promise,但它是 one 的最终值。

您应该做的是返回查询的 promise 链:

return db.query(mysql.format(sql, params))
.then(function (results) {
return results[0].id // clearly this is not a promise
})
.catch(function (error) {
console.error('Error while retrieving...: ' + error)
res.status(500).send('Internal server error')
})

这样做,您将返回一个 promise,该 promise 要么以链的最后一个值解决,要么失败。你可以按照你要求的方式使用它:

method1.then(function(value){
// Here, value is results[0].id
})
.catch(function(err){
// Manage a failed query
});

关于 Promises 的工作原理,您可能想阅读一篇很棒的文章:https://blog.domenic.me/youre-missing-the-point-of-promises/

关于mysql - promise 自定义方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39789022/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com