具有Kotlin协程的番石榴加载缓存

时间:2018-11-30 13:08:33

标签: rest caching kotlin guava ktor

我正在使用番石榴的Loading Cache来缓存HTTP请求的结果。 Kotlin / KTOR提供基于协程(即非阻塞HTTP请求)的HTTP Client Library

我的问题是,加载缓存不了解suspend ing函数。我传递给加载缓存的load函数无法暂停。因此,我被迫在runBlocking调用中执行HTTP请求,从而完全消除了非阻塞调用的好处。

我的问题是:还有更好的方法吗?您将如何实现协程结果的缓存?

1 个答案:

答案 0 :(得分:5)

您可以将goBack()从协程const GET_ME = gql` query me { me { _id } } `; const GET_WALLET = gql` query getUserWallet($u_id: ID!) { getUserWallet(u_id: $u_id) { _id } } `; const CREATE_CARD = gql` mutation($wallet_id: ID!, $cardNo: String!, $exp: String!, $cvc: String!, $card: String! $user: ID!) { createPayment(wallet_id: $wallet_id, cardNo: $cardNo, exp: $exp, cvc: $cvc, card: $card, user: $user) { _id } } `; const mutationConfig = { props: ({ mutate }) => ({ createPayment: (wallet_id, cardNo, exp, cvc, card, user) => mutate({ variables: { wallet_id, cardNo, exp, cvc, card, user } }), }) } export default compose( withApollo, graphql(GET_ME, { name: "getMe" }), graphql(GET_WALLET, { name: "getWallet", options: (props) => ( { variables: { u_id: props.getMe.me._id } } ) }), graphql(CREATE_CARD, mutationConfig) )(AddCard); 放入番石榴的缓存中

类似这样的东西

Deferred