Javascript 从可观察子分类返回承诺值

Javascript 从可观察子分类返回承诺值,javascript,angular,async-await,observable,subscription,Javascript,Angular,Async Await,Observable,Subscription,是否有机会从getDataFromApi()从helpMe返回函数值?到目前为止,每次调用此函数时,我都会得到“null”值 第一个目标是我需要将订阅存储在全局子数组中。第二个目标是当我得到状态为400的响应时-我不想打开模态。只有当我拿到200美元并且一切正常时,我才想打开莫代尔 function async load() { const promise = await helpMe(); openModal(); } 将一个async函数传递给subscribe是毫无意义的-它丢弃

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

第一个目标是我需要将订阅存储在全局子数组中。第二个目标是当我得到状态为400的响应时-我不想打开模态。只有当我拿到200美元并且一切正常时,我才想打开莫代尔

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

将一个
async
函数传递给
subscribe
是毫无意义的-它丢弃了返回的承诺,它不等待任何东西。你需要使用

new Promise((resolve, reject) => {
    someService.someObservable.subscribe(resolve, reject);
})
或者只需拨打内置电话:


您可以使用普通的
rxjs
,而不是使用async/await特性。
switchmap
操作员可能会在以下方面帮助您:

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

我在这里可能是瞎的,但为什么你在这里需要可观察的?你就不能只做
let promise=await getDataFromApi()
此外,据我所知,
await
不能处理
subscribe
结果,因为它返回一个不能“等待”的可观察结果。如果您想
等待它(因此承诺为空),则应该将可观察对象转换为
承诺
订阅
触发回调的频率是多少?如果多次使用,无论如何使用承诺都没有意义。什么是
订阅
?我需要将此订阅存储在全局订阅数组中,以便在其他服务中执行进一步操作。
async function helpMe() {
    await someService.someObservable.toPromise();
    return getDataFromApi();
}
public helpMe()
{
  return this.someService.someObservable.pipe(
    switchMap(result =>
    {
      return someDataFromApi();
    }),
    tap(resultFromApi => {
      // ... do something with `resultFromApi` from `someDataFromApi`.
    }),
  ).toPromise();
}