Немедленно разрешенный наблюдаемый эквивалент $ q.when()

#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: ''
      });