按照另一个文档中的ID过滤列表中的pouchdb文档 - 按顺序排列两个承诺

时间:2016-10-02 09:06:24

标签: angularjs angular pouchdb

我在pouchdb中有两种类型的文档:

  • todos - 待办事项列表
  • user - 用户编号以单独的格式放入pochdb

当我写todos时,我也有userNo的变量。这样我知道他拥有哪些待办事项。 我在提供程序中有两个函数来获取todos和用户号。

在html列表中,我想通过管道按用户编号过滤待办事项:

<ion-item-sliding *ngFor="let todo of todos | filter : 'numer_p' : this.todoService.userNo">

如果我手动输入这个数字,那就太棒了。 Todos按此号码过滤。

问题是我在home.ts中有两个电话:ionViewLoaded:

    //call provider to get all docs to show on the list
this.todoService.getTodos().then((data) => {
this.todos = data;
});

//call provider to get userNo from pouchdb and set variable in the provider
this.todoService.getUser().then((result) => {
    console.log("getBadacz result:" + JSON.stringify(result));
    this.todoService.userNo = result['name'];
}).then(function(second){;
    console.log("second");
});

我需要在getUser之后调用getTodos。所以我需要使用Promises按顺序运行这个函数。 如果没有它,过滤器中的this.todoService.userNo是未定义的,因为它尚未设置。它不起作用。

我试着这样做:

    this.todoService.getUser().then((result) => {
    console.log("getBadacz result:" + JSON.stringify(result));
    this.todoService.userNo = result['name'];
}).then(function(second){;
    console.log("second");
    this.todoService.getTodos().then((data) => {
        this.todos = data;
    });
});

但是有一个错误:

EXCEPTION: Error: Uncaught (in promise): TypeError: Cannot read property 'todoService' of null

我试图按顺序安排这些承诺,但没有成功。

这里有小提琴,您可以在提供程序中找到函数的实现: Filter pouchdb docs by userID saved in another doc

非常感谢你的帮助。

1 个答案:

答案 0 :(得分:0)

在这种情况下,我会尝试在todo键中包含userId,这会提高性能(todos文档可能有像userId_todoId这样的键。)

所以你根本不需要两个承诺。