【问题标题】:How to convert "promises" to "string" in static methods [ts]如何在静态方法中将“promises”转换为“string”[ts]
【发布时间】:2017-04-24 09:52:36
【问题描述】:

我对在打字稿中使用“承诺”有疑问。我正在使用量角器和打字稿编写 e2e 测试框架,我想对数据库进行一些查询,以便使用检索到的数据来填写表格或进行验证。

我创建了一个新类“UserService”,其想法是使用一些静态方法来返回数据。我已经安装了 typeOrm 库来处理它。

问题是我找不到将“承诺”返回转换为“字符串”的方法。我该怎么做?

看一下代码:

import "reflect-metadata";
import { User } from "././entities/user";
import { ConnectionOptions, Connection, Driver, createConnection } from "typeorm";

const connectionOptions: ConnectionOptions = {
    driver: {
        type: "mysql",
        host: "localhost",
        port: 3306,
        username: "root",
        password: "admin123",
        database: "user"
    },
    entities: [User],
    autoSchemaSync: false
};

export class UserService {

    static getUserName(userId:number): string {

        let us = createConnection(connectionOptions).then(connection => { 
            return connection.getRepository(User).findOne({Id: userId})
        }).then(user => user.name);

        return us;  //it return an Promise<string>.
    }
}

进入“step”类,上面的类将被用作示例:

let name: string = UserService.getUserName(1);
txtUsername.Sendkeys(name);

【问题讨论】:

  • 你已经使用了两次,然后是 promise 的 then() 方法,在 promise 被解决后执行代码。在这里做同样的事情:UserService.getUserName(1).then(name =&gt; txtUsername.Sendkeys(name));
  • 确实不能。它是异步的,你必须等待它。 UserService.getUserName(1).then(name =&gt; txtUsername.Sendkeys(name))
  • 只有静态方法的 JavaScript class 是非常糟糕的代码。
  • 在国际英语中,我们说“问题”,而不是“怀疑”。

标签: parsing typescript promise protractor


【解决方案1】:

使用等待/异步:

let name = await UserService.getUserName(1);
txtUsername.Sendkeys(name);

这必须在定义为异步的函数中,并且您可能希望用 try/catch 包围它,它不会是同步的,但这是访问它的最简单方法。

并且对承诺毫无疑问......它们非常棒。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-03
    • 2015-06-30
    • 2013-03-12
    • 2011-11-17
    • 1970-01-01
    • 2017-11-04
    • 1970-01-01
    • 2011-01-26
    相关资源
    最近更新 更多