Как создать одно событие после завершения предыдущего, используя NgRx? - PullRequest
0 голосов
/ 30 апреля 2019

Я новичок в этой технологии, и я работаю над проектом, в котором используется сценарий удара.

Схема таблицы:

tbl.Product

idнаименование товараbrand_id [FK]

tbl.Brand

idBrandName

в этом, при отправке я сначала добавляю BrandName и беру недавно добавленный идентификатор записи бренда и вставляю полную запись в таблицу продуктов с brand_id.

Submit(){

this.saveBrand.emit(brand);
product.brand_id = brands.id;
this.saveProduct.emit(product);

}

для этого яиспользуя NgRx Store.

Brand.effects.ts

addBrand$: Observable<Action> = this.actions$
    .pipe(ofType<Add>(BrandActionTypes.Add),
      switchMap(action => this.BrandService.addBrand(action.payload)),
     map((Brand: any) => new AddSuccess(Brand)),
      catchError(err => {
        toastr.error(`Could not add Brand.`);
        console.error(err);
        return of(new AddFail(err));
      })
    );

Product.effects.ts

addProduct$: Observable<Action> = this.actions$
    .pipe(ofType<Add>(ProductActionTypes.Add),
      switchMap(action => this.ProductService.addProduct(action.payload)),
     map((Product: any) => new AddSuccess(Product)),
      catchError(err => {
        toastr.error(`Could not add Product.`);
        console.error(err);
        return of(new AddFail(err));
      })
    );

при одновременном выполнении обоих этих событий (оба не асинхронны).поэтому товар не получает brand_id.я ожидаю выходной как.

Submit(){

this.saveBrand.emit(brand); 
product.brand_id = brands.id;
this.saveProduct.emit(product); \\hold until brand get added

}

1 Ответ

0 голосов
/ 30 апреля 2019

Отправка действия - это асинхронный процесс, поэтому идентификатор бренда не «заполнен».Чтобы решить вашу проблему, вы можете сделать несколько вещей:

  • эффекты ваших продуктов могут прослушивать действие AddSuccess
  • использовать один эффект для обработки обоих вызовов службы
  • сделать по телефону?

Отличная статья о некоторых шаблонах NgRx: Шаблоны и методы

...