#asynchronous #angular #observable
#асинхронный #угловой #наблюдаемый
Вопрос:
Выполняя свое первое упражнение Angular 2 CRUD, я пытаюсь повторно использовать свою форму редактирования как для добавления нового, так и для редактирования существующего объекта.
У меня этот неправильный код:
this._route.params.forEach((params: Params) => {
let id = params['id'];
if (id) {
this._productService.getProduct(id)
.subscribe(
product => this.product = product,
error => this.errorMessage = <any>error
);
} else {
this.product = {
name: 'default name',
ean: '',
price: 0,
qty: 0,
imageUrl: '',
_id: ''
};
}
});
(<FormGroup>this.registerForm).setValue(this.product, {onlySelf: true});
… что неудивительно, не работает — потому что одна часть if
синхронизирована, другая — асинхронна.
Я хочу оптимизировать код и преобразовать статический шаблон объекта по умолчанию в значение из наблюдаемого объекта с немедленным разрешением — в основном эквивалент $q.when(myVar)
. Как мне это сделать?
Ответ №1:
Теперь я знаю, что это было бы:
return Observable.of({
name: 'default name',
ean: '',
price: 0,
qty: 0,
imageUrl: '',
_id: ''
});