【问题标题】:Cannot return Promise无法返回承诺
【发布时间】:2020-09-21 02:50:16
【问题描述】:

我正在使用Typeorm,所以我创建了一个返回连接的方法:

public static async getConnection(): Promise<Connection> {
    if (DatabaseProvider.connection) {
        return DatabaseProvider.connection;
    }

    const { type, host, port, username, password, database, extra, entities, migrations } = DatabaseProvider.configuration;
    DatabaseProvider.connection = await createConnection({
        type, host, port, username, password, database,
        extra,
        entities: [
            entities
        ],
        migrations: [
            migrations
        ]
    } as any); 

    return DatabaseProvider.connection;
}

我想将connection 分配给Telegraf 的机器人实例,所以我创建了一个.d.ts 文件来指定类型:

export interface TelegrafContext extends Context {
    db: Connection
}

然后:

bot.context.db = DatabaseProvider.getConnection().then((conn) => { return conn; });

我得到:

“Promise”类型缺少“Connection”类型的以下属性:名称、选项、isConnected、驱动程序等 32 个。

我做错了什么?

【问题讨论】:

  • then() 确实返回了另一个承诺。

标签: javascript node.js typescript promise typeorm


【解决方案1】:

可能是因为您尝试将Promise&lt;Connection&gt; 分配给bot.context.db,它应该是Connection

所以你可以:

DatabaseProvider.getConnection().then((conn) => { 
  bot.context.db = conn
});

或:

bot.context.db = await DatabaseProvider.getConnection()

【讨论】:

  • 可以直接解析then中的Promise吗?为什么我不能简单地从then 返回conn?它是否返回另一个Promise
  • @sfarzoso 是的,.then() 正在返回另一个承诺
  • 无法解析.then()中的Promise
猜你喜欢
  • 2016-06-15
  • 2019-02-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-27
  • 1970-01-01
  • 2015-06-05
相关资源
最近更新 更多