代码之家  ›  专栏  ›  技术社区  ›  Tachyon

离子3 sqlite返回空值

  •  0
  • Tachyon  · 技术社区  · 6 年前

    我正试图从我的离子3中的sqlite数据库中读取数据,但返回的值总是空的。如果我 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 回复  |  直到 6 年前
        1
  •  1
  •   IftekharDani    6 年前

    为了得到令牌,你需要使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 ionViewDidEnter(){
     let token = await this.sql.getToken();
      console.log(token);
    }
    

    2。或 Then

    ionViewDidEnter(){
         this.sql.getToken().then(token => {
    console.log(token)
         })
        .....
        }
    
        2
  •  0
  •   user7825545    6 年前

    只需尝试创建一个方法局部变量或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;
          })
      });
      }
    

    告诉我们这是否可行。

        3
  •  0
  •   Tachyon    6 年前

    IftekharDani 通过提到承诺,指出了正确的方向,尽管他的解决方案没有直接起作用,但它帮助我开发了一个这样的解决方案。我最后得到的代码如下:

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