mysql - 我如何将 typescript 回调转换为 promise

标签 mysql typescript promise


我想在我的课上做一个方法。此方法应连接到 MySQL 数据库。我创建了我的 SQL 代码。现在我不想做回调,因为这是旧的,我想开始使用 promise 。

我的回调函数(老派):

public does_player_exist(username: string, callback: any) {
    this.mysql.connect();
    this.mysql.query('USE devdb');
    this.mysql.query('SELECT p_name FROM players WHERE p_name = "'+username+'"', (err: Error, result: any[]) {
        if (result.length === 1) {
            callback(true)
        } else {
            callback(false);
        }
    });
}

下面是我试图做出 promise 但失败的方法:

public does_player_exist(username: string): Promise<boolean> {
    this.mysql.connect();
    this.mysql.query('USE devdb');
    return this.mysql.query('SELECT p_name FROM players WHERE p_name = "'+username+'").toPromise().then((result) => {
        return result.length === 1;
    })
}

当我调用这个方法时:

service.does_player_exist('test').then((result) => { console.log(result) })

我希望有人能帮助我。因为我真的不想永远守旧派 xD

提前致谢。

最佳答案

创建一个新的Promise并在query的回调函数中解析/拒绝它。然后返回 promise 。现在 does_player_exist 返回一个 Promise 对象,其中包含例如 then 函数

public does_player_exist(username: string, callback: any): Promise<boolean> {
    this.mysql.connect();
    this.mysql.query('USE devdb');
    var promise = new Promise<boolean>();
    this.mysql.query('SELECT p_name FROM players WHERE p_name = "'+username+'"', (err: Error, result: any[]) {
        if (!err) promise.resolve(!!result.length);            
        else promise.reject();
    });
    return promise;
}

您必须确保您有可用的 Promise 类。这取决于您的环境。

请注意,如果不对您的输入(用户名)进行清理,您的应用程序将容易受到攻击,攻击者可能会劫持您的应用程序。

关于mysql - 我如何将 typescript 回调转换为 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44198178/

相关文章:

mysql - 如何从 mysql select 查询中删除重复行?

mysql - 优化查询,花费更多时间执行

javascript - JQuery - offset()/position() 的回调

javascript - 使用 promise 时的逻辑流程

javascript - promise 并行性和 CPU

mysql - 如何通过 mysql 触发器更新 ETS 表

mysql - 我是否必须时不时地创建一个特定的非聚集索引?

javascript - Backbone.Collection 获取第一个 n 作为新集合

typescript - 从对象字面量派生 TypeScript 接口(interface)

javascript - TypeScript 将类型保存为未定义