Я пытаюсь вызвать функцию, расположенную в классе сервиса, и если эта функция возвращает данные, одна логическая переменная устанавливает true. У меня есть 2 класс как bollow: student.ts и service.ts:Как сделать синхронное обещание в angular2
// student.ts
public ngOnInit() {
this.config.load().then(() => {
this.service.getRecords().then(
function() { console.log("success getRecord");
this.loading = false; },
function() { console.log("failed getRecord");
this.loading = true; });
});
}
//service.ts
public getRecord(id: number): Promise<T> {
return this.getRecordImpl();
}
private getRecordsImpl(): Promise<T[]> {
let url = this.serviceUrl;
return this.http.get(url, this.getRequestOptionsWithToken())
.toPromise()
.then(res => {
this.records = this.extractData<T[]>(res);
for (var i = 0; i < this.records.length; i++) {
var record = this.records[i];
this.onRecord(record);
}
return this.records;
})
.catch(this.handleError);
}
на теперь, записи из службы возвращает, но this.service.getRecords(); не определено. и я не могу использовать
.then
для обработки успеха и действия неудачи. Я знаю, что это нехорошо, чтобы сделать его синхронным. но думаю, что быть асинхронными причинами getRecords становится неопределенным. Каково решение для этого. Я хочу, чтобы он запускался последовательно. и если служба возвращает любые записи, переменная инициализирует значение false, в противном случае она устанавливает значение true.
Большое спасибо за помощь и руководство.
Что вы имеете в виду 'this.service.getRecords();' 'является undefined'? Означает ли это, что возвращаемое значение 'getRecords()' 'undefined' (маловероятно) или что' this.service' не определено? Откуда берется «this.service»? (где он установлен?) –
getRecords - это функция в моем service.ts, которая возвращает список учеников. К настоящему времени он работает, и когда я его называю, список студентов возвращается. но я хочу изменить значение атрибута, когда getRecords выполняется успешно, для этого я добавил this.service.getRecords(). then (function() {console.log ("success getRecord"); this.loading = false;}, function() {console.log ("failed getRecord"); this.loading = true;}); но я получил ошибку для использования. then в неопределенном объекте. –
Я ищу способ сделать что-то, когда служба возвращает данные. когда я вызываю this.service.getRecords(), записи возвращаются, но мой вопрос в том, как я могу что-то сделать после возвращения записей из службы? –