2017-04-22 2 views
1

タイプスクリプトで "約束"を使用することに疑問があります。私は分度器とタイプスクリプトでe2eのテストフレームワークを書いています。フォームを記入したりバリデーションを行うために取得したデータを使用するために、データベースに何らかの問い合わせをしたいと思います。静的メソッド[ts]で "約束"を "文字列"に変換する方法

新しいクラス "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>. 
    } 
} 

は、上記のクラスは次のように例で使用されます。

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

約束が解決されたら、すでにコードを実行するという約束の2回目、次に()の方法を使用しています。 'UserService.getUserName(1).then(name => txtUsername.Sendkeys(name)); ' –

+0

実際にはできません。それは非同期です、あなたはそれを待たなければなりません。 'UserService.getUserName(1).then(name => txtUsername.Sendkeys(name))' – Bergi

+0

静的メソッドのみを持つJavaScriptの 'class'は非常に悪いコードです。 –

答えて

1

利用のawait /非同期:

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

これはasyncとして定義された関数内にある必要があり、おそらくtry/catchで囲む必要があります。これはsyではありませんそれはそれにアクセスする最も簡単な方法です。

そして、約束について疑う余地はありません。彼らはとても素晴らしいです。

関連する問題