如何使用 angular 2 return promise 的值

How to return value of promise using angular 2

这是我的承诺函数,我需要 return rs.rows.item(0);

的值
     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);
                });
            });
        });    
  }

return 值我得到了一个像这个图像的对象

我需要像这个例子一样

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

Promises 为我们提供了抽象,帮助我们处理应用程序的异步性质。由于我们不知道这些操作需要多少时间(因此,数据何时可用),您需要使用 then() 方法在数据准备好使用时执行一些代码:

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

首先,您需要 func 来获取所有数据:

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

其次,如果你需要一件可以使用

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

您可以像这样使用 await operator

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

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

await 运算符 等待 形成 return 结果的 Promise。 这只能在异步函数内部完成(使函数异步将使它成为 return 承诺本身)。

这是一个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;
}