Как вернуть значение обещания с помощью angular 2

Это моя функция обещания, мне нужно вернуть значение 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);
                });
            });
        });    
  }

возвращаемое значение я получил объект, подобный этому изображению результат изображения

мне нужно получить как этот пример

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

person PAncho    schedule 24.08.2016    source источник
comment
Возможный дубликат данных AngularJS $promise then() undefined   -  person Tamas Hegedus    schedule 24.08.2016
comment
@PAncho, могу я спросить, почему вы думаете, что мой ответ больше не должен быть принятым ответом? :)   -  person sebaferreras    schedule 21.10.2017


Ответы (4)


во-первых, вам нужна функция func для получения всех ваших данных:

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

во-вторых, если вам нужен один предмет, вы можете использовать

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

Промисы предоставляют нам абстракции, которые помогают нам справляться с асинхронной природой наших приложений. Поскольку мы не знаем, сколько времени займут эти операции (и, следовательно, когда данные будут доступны), вам нужно использовать метод then() для выполнения некоторого кода, когда данные будут готовы к использованию:

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

Это Promise, поэтому вам нужно использовать then:

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

Если вы используете TypeScript или версию JavaScript, которая поддерживает async/await, вы можете сделать это:

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

Вышеприведенное должно быть в функции async, например:

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

Вы можете использовать оператор ожидания следующим образом. :

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

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

Оператор await ожидает от промиса, чтобы вернуть результат. Это можно сделать только внутри асинхронной функции (создание асинхронной функции заставит ее возвращать обещание).

person Manuel Domínguez    schedule 10.10.2018