web-dev-qa-db-ja.com

angular 2を使用してpromiseの値を返す方法

これは、rs.rows.item(0)の値を返す必要がある私のpromise関数です。

     public getCustomer()  : any
  {
        let  db =  window.sqlitePlugin.openDatabase({name: 'data.db', location: 'default'});
        return new Promise((resolve, reject) =>
        {
            db.transaction(function(tx)
            {
                tx.executeSql('SELECT * FROM customer ORDER BY customerId DESC LIMIT 1', [], function(tx, rs)
                {
                     return resolve(rs.rows.item(0));
                }, 
                function(tx, error) 
                {
                    console.log('SELECT error: ' + error.message);
                    reject(error);
                });
            });
        });    
  }

この画像のようなオブジェクトを取得した戻り値 image result

私はこの例のようになる必要があります

var customer = getCustomer();
customer.name;
customer.email;
8
PAncho

まず、すべてのデータを取得するにはfuncが必要です。

getAll(): Promise<Phrase[]> {
    return phrasesPromise;
}

第二に、あなたが使用できる1つのアイテムが必要な場合

ngOnInit() {
    this.phraseService
        .getAll()
        .then((result: Phrase[]) => this.phrases = result);
}
3
Volodymyr Khmil

Promisesアプリケーションの非同期性に対処するのに役立つ抽象化を提供します。これらの操作にかかる時間(したがって、データがいつ利用可能になるか)がわからないため、データの準備ができたら、then()メソッドを使用してコードを実行する必要があります。中古:

this.getCustomer()
    .then((data) => {
        // Here you can use the data because it's ready
        // this.myVariable = data;
    })
    .catch((ex) => {
        console.log(ex);
    });
7
sebaferreras

これはPromiseなので、thenを使用する必要があります。

getCustomer()
    .then(customer => {
        customer.name;
        customer.email;
    });

TypeScript、またはasync/awaitをサポートするバージョンのJavaScriptを使用している場合は、次の操作を実行できます。

var customer = await getCustomer();
customer.name;
customer.email;

上記は、次のようにasync関数に含める必要があります。

async displayCustomerDetails() {
    var customer = await getCustomer();
    customer.name;
    customer.email;
}
2
James Monger

await operator を次のように使用できます。

getCustomer(): Promise<any> {
    [...]
}

async functionThatNeedsCustomer() {
    const customer = await getCustomer();
    const name = customer.email;
    const email = customer.email;
}

Await演算子awaitsは、結果を返すためにPromiseを形成します。これは、非同期関数内でのみ実行できます(関数を非同期にすると、promise自体が返されます)。

1