【问题标题】:Returned value is a promise even though the service is async [duplicate]即使服务是异步的,返回值也是一个承诺 [重复]
【发布时间】:2022-01-16 21:50:33
【问题描述】:

我有一个 service.ts,它正在向之前从 Apollo GraphQL 获取的数据添加额外的数据。但数据并不重要。重要的是——如何获取返回值?

class TestService implements TestServiceInterface {
  public async fetch(): Promise<any> {
    const result = await apolloClient.query({
      query: gql`
        query Query {
          Test{
           test
           }
            }
          }
        }
      `,
    })


    return {
      graphTitle: "Test",
      graph: "LINE",
      
    };
  }
}

export interface TestServiceInterface {
  fetch(): Promise<any>;
}

如何从另一个.ts文件中获取TestService的返回值?

const test = TestService.fetch()

export const TestState = (async () => {
  return await test
})()

然后:

const initialState = {state: [TestState]}

几乎给了我我需要的东西,但现在在我收到的组件中(仍然是一个错误):

Promise {   "_U": 0,   "_V": 1,   "_W": Object {  **I have correct values here** }

如何从对象内部获取值?

【问题讨论】:

  • 仍然需要await它。即使使用像 export const TestState = (async () =&gt; { return await test })() Async function returning promise, instead of value 之类的异步 IIFE,您也无法将 Promise 转换为同步值
  • 那么在这种情况下我怎么能把它分配给我的const initialState呢?
  • 即使服务是异步的也承诺”没有意义。这正是一个承诺因为服务是异步的。

标签: javascript reactjs graphql apollo


【解决方案1】:

正如 VLAZ 指出的那样

您不能将承诺转换为同步值

在您的代码中获取test 中的值,您应该执行以下操作

const test = await TestService.fetch()

也可以参考VLAZ提供的链接

Async function returning promise, instead of value

【讨论】:

    猜你喜欢
    • 2014-01-06
    • 2017-12-07
    • 2018-12-22
    相关资源
    最近更新 更多