Возврат наблюдаемого массива из предметного вызова Rxjs WebSocket - PullRequest
0 голосов
/ 24 мая 2019

Попытка вернуть Observable из вызова субъекта Websocket rxjs6. Трудно понять асинхронную природу подписки. Код также фильтруется в возвращенном конверте для извлечения Product [].

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

getAllProducts() : Observable<Product[]> {
  let document: GetAllDocument = new GetAllDocument().init();
  let envelope = 
    new AuctionEnvelope().init(AuctionMethods.getAll,document);
  this.ws.subject.next(envelope); // call server
  let result__: Product[] = [];
  this.ws.subject.asObservable().subscribe( (resp: AuctionEnvelope) => {
    pipe(
      filter((resp)=>resp.method===AuctionMethods.getAllResponse,
      map((resp:AuctionEnvelope) =>resp.getAllResponseDocument.result),
      map((products: Product[]) => this.result__ = products) 
    );
  }
  );
  return from(this.result__);
}

Я хотел бы вернуть результат асинхронным способом, чтобы приложение могло получить результат, когда оно будет готово с помощью Observable.

1 Ответ

0 голосов
/ 04 июня 2019
getAllProducts() : Observable<Product[]> {
        let document: GetAllDocument_V1 = new GetAllDocument_V1().init();
        let envelope = new AuctionEnvelope_V1().init(AuctionMethods.getAll_1, document);
        this.ws.subject.next(envelope); // call server
        return this.ws.subject.asObservable().pipe(
          filter( (resp: AuctionEnvelope_V1) => resp.method === AuctionMethods.getAllResponse_1 ), // mine
          map((resp: AuctionEnvelope_V1) => resp.getAllResponseDocument_V1.result) // get result from envelope
        );
    }

Я понял, что могу вернуть результат вызова pipe ().Это позволило мне получить продукт [] из конверта-> документа, чтобы получить результат.

...