如果我第一次调用它,那么db.get就不起作用了

时间:2017-05-26 08:44:33

标签: typescript pouchdb

我有一个奇怪的问题: 我有一个简单的函数来从myData.ts中的数据库中获取用户信息。

test = <any>{};

  getUserInfoFromPouch(filter: string):any{

    this.db.get(filter).then((result) => {
      this.test = result;
    })
    return this.test;
  }

它有效......有点。

我在user-data-page构造函数中调用该函数:

this.userData = this.myData.getUserInfoFromPouch(this.userId);
console.log('------------------t1----------------------------------');
console.log(this.userData);
console.log('------------------t2----------------------------------');
console.log(this.myData.test);

但我只得到一个安培对象:

------------------t1----------------------------------  main.js:62736:9
Object {  }  main.js:62737:9
------------------t2----------------------------------  main.js:62738:9
Object {  }

如果我通过按钮再次调用该功能,我会得到我期望的实际输出。 如果我不首先在构造函数中调用该函数,我必须使用该按钮两次来获取数据。 这非常令人困惑。 我尝试了许多不同的功能拼写,如:

test = <any>{};

      getUserInfoFromPouch(filter: string):any{

        return this.db.get(filter).then((result) => {
        })
      }

test = <any>{};

      getUserInfoFromPouch(filter: string):any{

        this.db.get(filter).then((result) => {
        return result;
      })
      }

我做错了什么? 谢谢你的帮助。

顺便说一下。我在数据库中只有一条记录。 (用于测试目的)

修改 好的,我尝试了这样的功能:

async getUserInfoFromPouch(_id: string){


    try {
      this.test = await this.db.get(_id);
    } catch (err) {
      console.log(err);
    }
    console.log('------------------t3----------------------------------');
    console.log(this.test);

  }

我在我的用户页面的构造函数中调用该函数,就像之前一样。 在我调用函数之后,我用函数中的test var填充我的userdata:

    this.myData.getUserInfoFromPouch("userinfo");
    this.userData = this.myData.test;
    console.log('------------------t1----------------------------------');
    console.log(this.userData);

但userData为空。我得到了函数的console.output后我做了:

this.userData = this.myData.test; 

我做错了一些事情; - (

1 个答案:

答案 0 :(得分:1)

好的,它解决了承诺的问题。

 this.myData.getDocumentById('userInfo').then(res=>{
      if (res!=undefined){
        this.userData=res;
      } 
    }).catch(err=>{
      console.log('userInfo-error:  ', err)
    }); 

现在它可以正常工作 我的getDocumentById函数锁定如下:

 getDocumentById(id: string):any {
    this.syncTwoWay();
    return this.db.get(id).then((doc) => {
      return doc;
    }).catch((err) => {
      console.log('getDocumentById' + err);
    });
  }