Вернуть значение обещания из наблюдаемой подписки - PullRequest
0 голосов
/ 01 июля 2019

Есть ли шанс вернуть значение функции helpMe из getDataFromApi ()?Пока что каждый раз, когда я вызываю эту функцию, я получаю нулевое значение.

       async function helpMe() {
            let promise = null;
            let sub = someService.someObservable.subscribe(async () => {
               promise = await getDataFromApi()
            })
            subscriptions.push(sub)
            return promise;
        }

Первая цель - мне нужно хранить подписку в глобальном подмассиве.Вторая цель - когда я получаю ответ со статусом 400 - я не хочу открывать модальное.Только когда я получу 200 и все в порядке, я хочу, чтобы модал открыли.

function async load() {
  const promise = await helpMe();
  openModal();
}

Ответы [ 2 ]

0 голосов
/ 01 июля 2019

Вместо использования функции асинхронного ожидания / ожидания вы можете просто использовать простой rxjs.Вам может помочь оператор switchmap:

public helpMe()
{
  return this.someService.someObservable.pipe(
    switchMap(result =>
    {
      return someDataFromApi();
    }),
    tap(resultFromApi => {
      // ... do something with `resultFromApi` from `someDataFromApi`.
    }),
  ).toPromise();
}
0 голосов
/ 01 июля 2019

Передача функции async на subscribe бессмысленна - она ​​отбрасывает возвращенное обещание, ничего не ждет. Вам нужно будет использовать

new Promise((resolve, reject) => {
    someService.someObservable.subscribe(resolve, reject);
})

или просто вызовите встроенный toPromise метод :

async function helpMe() {
    await someService.someObservable.toPromise();
    return getDataFromApi();
}
...