【问题标题】:How to extract value from async method and put value in apolloProvider variable?如何从异步方法中提取值并将值放入 apolloProvider 变量中?
【发布时间】:2020-04-15 16:20:35
【问题描述】:

我想从异步方法extractZMockClient 中提取值并将这个值放入属性中的 apolloProvider 变量中:defaultClient 和 clients。

我已经这样做了,但在 console.log(apolloProvider()) 我明白了:

const ZMockClient = async () => import("z-mock-client")

const extractZMockClient = async () => {
    try {
        const callZMockClient = await ZMockClient()
        return callZMockClient.mockedClient
    } catch (ex) {
        throw new Error(ex)
    }
}

const apolloProvider = new VueApollo({
    defaultClient: MOCKED_UI ? extractZMockClient() : v2,
    clients: {
        v2: MOCKED_UI ? extractZMockClient() : v2
    }
})

【问题讨论】:

  • 如果VueApollo 不接受promise 作为参数,您需要将整个apolloProvider 设为promise。如果您说要延迟加载客户端,为什么还要立即实例化它?

标签: javascript vue.js promise async-await lazy-loading


【解决方案1】:

extractZMockClient 隐含了一个返回的承诺,该承诺会使用您的返回值进行解析。为了获得您的价值,请使用

extractZMockClient().then(function(result){ 
    // create your apollo
})

结果对应于您在 extractZMockClient 中的返回

建议:扔掉提取物,直接使用

ZMockClient().then((response)=>{ 
    // dostuff
}).catch((error)=>{console.error(error)})

因为你将它与 await 一起使用,它会返回一个承诺;)

【讨论】:

  • 无需更改语法,因为 await 表达式等待 promise 被解析并评估为解析值。你可以阅读更多关于它here
  • 这确实是可能的,只要它在异步函数中使用
  • 我不确定@kikosko 是否真的喜欢他们 XD
【解决方案2】:

我认为您在这里缺少await

const ZMockClient = async () => await import("z-mock-client")

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-04
    • 1970-01-01
    • 2021-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多