#angularjs #angular #pouchdb
#angularjs #angular #pouchdb
Вопрос:
У меня есть два типа документов в pouchdb:
- задачи — список задач
- пользователь — просто номер пользователя, введенный в pochdb отдельной формой
Когда я пишу задачи, у меня также есть переменная для UserNo. Таким образом, я знаю, какие задачи у него есть. У меня есть две функции в provider для получения задач и номера пользователя.
В списке html я хочу фильтровать задачи по номеру пользователя через канал:
<ion-item-sliding *ngFor="let todo of todos | filter : 'numer_p' : this.todoService.userNo">
Если я ввожу это число вручную, оно отлично работает. Задачи фильтруются по этому номеру.
Проблема в том, что у меня есть два вызова в 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");
});
Мне нужно вызвать getTodos ПОСЛЕ getUser. Поэтому мне нужно последовательно запускать эти функции, используя обещания.
Без этого 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
Я попытался упорядочить эти обещания по порядку, но безуспешно.
Вот скрипка, в которой вы можете найти реализацию функций в provider: Фильтровать документы pouchdb по идентификатору пользователя, сохраненному в другом документе
Большое вам спасибо за вашу помощь.
Комментарии:
1. Это angular2? Попробуйте удалить
this.
изthis.todoService.userNo
вашего html-шаблона2. Я думал, что это связано с проблемой «спешки». Кажется, я слишком усложнил это
Спасибо! Это работает.
Ответ №1:
В подобной ситуации я бы попытался включить идентификатор пользователя в ключ todo, что повысило бы производительность (документ todos может иметь такой ключ userId_todoId
).
Таким образом, вам вообще не понадобятся два обещания.