Я запускаю Angular 2 beta.Угловой 2 Сервис с использованием Fetch and Promise
Я пытаюсь создать службу http, используя выборку, которая реализует обещания. Вот то, что я до сих пор:
HttpService.ts:
@Injectable()
export class HTTPService {
save(url: string, jsonPayload: JsonPayload): any {
window.fetch(url, {
method: "POST",
headers: {
"Accept": "application/json",
"Content-Type": "application/json"
},
body: jsonPayload
})
.then(status)
.then(json)
.then((response: any) => {
this.response = response;
return Promise.resolve(this.response);
})
.catch((error) => {
console.log(error.message);
return error.message;
});
}
}
Вот сервис потребляя класс:
export class ConsumingComponent {
constructor(private _httpService: HTTPService) {
...
}
getSampleStuff() {
this._httpService
.save("http:sample.com/sample/stuff", this.jsonPayload)
.then(response => this.response = response);
this.sampleStuffModel = this.response;
}
}
Мое намерение вызвать веб-службу асинхронно.
Это, как я понимаю технологию:
- Инициализировать обещание в службе
- Вводить службу в класс потребляющего
- Добавить «.Затем (...)» в классе потребляющего , результаты обратного вызова здесь.
Я попытался установить член класса («this.response») на ответ («ответ»).
Когда я выполняю это обещание, ответ имеет значение null или undefined.
Я предполагаю, что реализация функции разрешения является источником проблемы. Свернуть все window.fetch() в решении()?
ShanShan, спасибо, что ответ! – LargeDachshund
Вы последнее предложение может быть ответом, который я ищу. Угловая ссылка 2 имеет чрезмерно упрощенную реализацию Служб здесь: https://angular.io/docs/ts/latest/tutorial/toh-pt4.html#async-services-and-promises Пример реализует Promise, но пример не использует веб-службу в качестве примера. Это заставило меня поверить, что мне нужно реализовать обещание. Поскольку API-интерфейс Fetch уже дает обещание, мне не нужно реализовывать другой! Я возьму ваше предложение и не отвечу на службу в службе. Еще раз спасибо! – LargeDachshund
@LargeDachshund Имейте в виду, что 'fetch()' не работает во всех браузерах. – Shanoor