Ionic 3 Sqlite Возвращается Нуль - PullRequest
0 голосов
/ 15 января 2019

Я пытаюсь считать из моей базы данных Sqlite в Ionic 3, но возвращаемое значение всегда равно null.Если я console.log(data.rows.item(0).token) в методе, то он записывает правильное значение на консоль, но не возвращает правильное значение вызывающему коду.

Это метод, который я использую для получения токена:

getToken() {
    //Open database
    this.openCreateDatabase()
      .then((db: SQLiteObject) => {
        //Execute select
        db.executeSql("SELECT token FROM Token WHERE id = 1", [])
          .then((data) => {
            //Get and return the token
            return data.rows.item(0).token;
          })
          .catch((e) => {
            //Log any errors
            console.log(JSON.stringify(e));
            return null;
          })
      });
  }

Код вызова просто:

ionViewDidEnter(){
  console.log(this.sql.getToken());
}

Ответы [ 3 ]

0 голосов
/ 15 января 2019

Для получения токена вам нужно сделать getToken как Promise.

Добавить возврат до openCreateDatabase;

getToken() {
    //Open database
    //
    return this.openCreateDatabase()
      .then((db: SQLiteObject) => {
        //Execute select
        db.executeSql("SELECT token FROM Token WHERE id = 1", [])
          .then((data) => {
            //Get and return the token
            return data.rows.item(0).token;
          })
          .catch((e) => {
            //Log any errors
            console.log(JSON.stringify(e));
            return null;
          })
      });
  }

Изменить ionViewDidEnter на:

1.async ожидает

async ionViewDidEnter(){
 let token = await this.sql.getToken();
  console.log(token);
}

2. Или Then

ionViewDidEnter(){
     this.sql.getToken().then(token => {
console.log(token)
     })
    .....
    }
0 голосов
/ 15 января 2019

ИфтехарДани указал мне правильное направление, упомянув обещания, хотя его решение не сработало напрямую, оно помогло мне разработать то, что было. Код, который я закончил, выглядит следующим образом:

getToken() {
    return new Promise((resolve, reject) => {
      this.openCreateDatabase()
        .then((db: SQLiteObject) => {
          db.executeSql("SELECT * FROM Token WHERE id = 1", [])
            .then((data) => {
              let tokenValues = [];
              if (data.rows.length > 0) {
                for (let i = 0; i < data.rows.length; i++) {
                  tokenValues.push(data.rows.item(i).token);
                }
              }
              resolve(tokenValues);
            }, (error) => {
              reject(error);
            })
        });
    });
  }
0 голосов
/ 15 января 2019

Просто попробуйте создать локальную переменную метода или глобальную переменную js-файла и вернуть ее. Примерно так:

getToken() {
//Open database
this.openCreateDatabase()
  .then((db: SQLiteObject) => {
    //Execute select
    db.executeSql("SELECT token FROM Token WHERE id = 1", [])
      .then((data) => {
        //Get and return the token
        let val = data.rows.item(0).token;
        return val;
      })
      .catch((e) => {
        //Log any errors
        console.log(JSON.stringify(e));
        return null;
      })
  });
  }

Скажите нам, если это работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...