当前位置: 首页 > 面试题库 >

承诺的mysql模块如何与NodeJS一起使用?

邹桐
2023-03-14
问题内容

我正在尝试在NodeJS中使用MySQL。我的整个应用程序都是基于Promise构建的,因此我也想推广该mysql模块。

所以我有这个:

Promise = require('bluebird');
var mysql = Promise.promisifyAll(require('mysql'));

现在,根据他们的API,该connect()方法接受一个参数,err即在发生连接错误时调用的回调。我的问题是,这如何转化为承诺?

承诺会因错误而解决吗?会被拒绝吗?我.catch()可能需要吗?这是如何运作的?


问题答案:

如果某个方法是带有单个参数的节点“
errback”-它将在中没有任何参数地进行解析,then或者err通过传递给它而被拒绝。如果是promisification,则可以使用.error或使用Promise.OperationalError

这是一个简单的方法:

function getConnection(){
    var connection = mysql.createConnection({
      host     : 'localhost',
      user     : 'me',
      password : 'secret'
    });
    return connection.connectAsync().return(connection); // <- note the second return
}

getConnection().then(function(db){
    return db.queryAsync(....);
}).error(function(){
   // could not connect, or query error
});

如果这是用于管理连接-我会使用Promise.using-这是API的示例:

var mysql = require("mysql");
// uncomment if necessary
// var Promise = require("bluebird");
// Promise.promisifyAll(mysql);
// Promise.promisifyAll(require("mysql/lib/Connection").prototype);
// Promise.promisifyAll(require("mysql/lib/Pool").prototype);
var pool  = mysql.createPool({
    connectionLimit: 10,
    host: 'example.org',
    user: 'bob',
    password: 'secret'
});

function getSqlConnection() {
    return pool.getConnectionAsync().disposer(function(connection) {
        try {
            connection.release();
        } catch(e) {};
    });
}

module.exports = getSqlConnection;

这会让你做:

Promise.using(getSqlConnection(), function(conn){
    // handle connection here, return a promise here, when that promise resolves
    // the connection will be automatically returned to the pool.
});


 类似资料:
  • 问题内容: 我试图将Python 3程序反向移植到2.7,但遇到了一个奇怪的问题: 根据文档,返回Unicode文本的内存流。当我尝试手动输入Unicode字符串时,它可以正常工作。为什么即使所有写入的字符串都是Unicode字符串,它也无法与模块结合使用?在什么地方来,它使得异常? (我知道我可以代替使用,但是我想知道在这种情况下怎么了) 问题答案: Python 2.7模块不支持Unicode

  • 问题内容: 这是一个程序,可将数据从T恤衫网站上抓取,然后将产品信息写入CSV文件。 有3个刮擦功能和1个写入功能。 现在,我正面临一场绝对的噩梦,试图在没有任何第三方库或软件包的情况下实现如何在这里实现承诺。仅凭ES6的本机功能可以做到吗? 由于请求的异步性质,我需要每个函数及其请求在调用下一个函数之前完全完成。这样,我就可以使用下一个函数中的变量。 我怎么能简单地做到这一点而无需重写我的整个代

  • 问题内容: 我最近开始使用Go 1.11,并且喜欢这些模块。除了运行时依赖性外,我还需要在构建期间(例如在期间)使用go模块。 如何安装特定的构建依赖项(例如github.com/aprice/embed/cmd/embed)并从哪个文件夹运行该特定工具?是正确的工具吗? 问题答案: https://github.com/golang/go/issues/25922被证明对我有帮助,特别是 在模块

  • 我正在静态站点上使用本机es6模块。 在部署之前,我通过Babel传递js文件 //网页包。配置。js //. babelrc 默认情况下,babel会将模块转换为公共js,尽管我的代码中有一个标志“modules”:false。巴别塔 我不想让babel把模块变成通用的,我只想把除了导入和导出之外的所有东西都变成es2015,这样我就可以在浏览器中使用原生模块了 像这样://main.js之前

  • 本文向大家介绍Python的super()如何与多重继承一起使用?,包括了Python的super()如何与多重继承一起使用?的使用技巧和注意事项,需要的朋友参考一下 在解释super() 之前,我们首先需要了解多重继承的概念。 多重继承:意味着一个子类可以继承多个父类。 在以下示例中,子类从父类继承了属性方法。 示例 输出结果 在下面的示例中,显示了(即)   super()具有多个继承 sup