我在pouchdb中有两种类型的文档:
当我写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
非常感谢你的帮助。
答案 0 :(得分:0)
在这种情况下,我会尝试在todo键中包含userId,这会提高性能(todos文档可能有像userId_todoId
这样的键。)
所以你根本不需要两个承诺。