从可观察的订阅中返回承诺值

时间:2019-07-01 11:30:40

标签: javascript angular async-await observable subscription

是否有机会从getDataFromApi()的helpMe函数值返回?到目前为止,每次我调用此函数时,我都会得到“空”值。

       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 :(得分:0)

JavaScript函数传递给async是毫无意义的-它会丢弃返回的承诺,它不会等待任何事情。您将需要使用

subscribe

或仅调用内置的toPromise method

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

答案 1 :(得分:0)

您可以只使用普通的rxjs而不是使用异步/等待功能。 switchmap运算符可能会在这里为您提供帮助:

public helpMe()
{
  return this.someService.someObservable.pipe(
    switchMap(result =>
    {
      return someDataFromApi();
    }),
    tap(resultFromApi => {
      // ... do something with `resultFromApi` from `someDataFromApi`.
    }),
  ).toPromise();
}