javascript - ApolloClient超时最佳选择

标签 javascript graphql apollostack

我想出了这种用ApolloClient进行网络操作的方法,但问题是代码看起来非常丑陋并且难以阅读,考虑到我必须编写几十个这样的查询,它就变成了令人厌烦且难以维护。

我在 Apollo 文档或实际代码中没有找到任何配置超时的内容。

let query = gql`
  query ... {
}`;
let x = 0;
let timer = setTimeout(() => {
  if (x === 0) {
    console.log('error');
  }
  x = 1;
}, 3000);
ApolloClient.query({ query }).then(({data}) => {
  clearTimeout(timer);
  if (x === 0) {
    if (data.result) {
      console.log(data.result)
    } else {
      console.log('error');
    }
  }
}).catch((error) => {
  clearTimeout(timer);
  console.log('error')
});

有没有更好的方法可以用更少、更简单的代码实现相同的结果?

最佳答案

事实证明,您可以重写该方法:

export async function query(request) {
  const options = {...this._opts};
  return new Promise((resolve, reject) => {
    setTimeout(() => reject('Network timed out'), 1e4); // 10 sec
    return this.applyMiddlewares({
      request,
      options
    }).then((rao) => {
      return this.fetchFromRemoteEndpoint.call(this, rao);
    }).then(response => this.applyAfterwares({
      response: response,
      options
    })).then(({response}) => (response).json()).then((payload) => {
      resolve(payload);
    }).catch((e) => {
      reject(e);
    });
  }).catch((e) => {
    console.log(e);
    return null;
  });
}

关于javascript - ApolloClient超时最佳选择,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40837676/

相关文章:

javascript - 无法读取未定义的属性 'category' - 尝试使用状态数据时出错

javascript - react 。尝试从 onClick 事件调用自定义 Hook

javascript - 错误 : No "exports" main defined in graphql-upload/package. json

symfony - API平台: How to normalize a collection of embedded entities in GraphQL?

javascript - 如何从日期对象中获取年/月/日?

GraphQL错误: Unknown argument 'deleted' on field 'removeFromPostsOnComments'

node.js - Apollo Stack 是否像 Relay 的 Node 接口(interface)一样支持全局对象识别?

graphql - Apollo GraphQL 变异(对象参数)

apollo - Apollo 客户端 optimisticResponse 如何工作

javascript - 基本 Javascript- HTML 按钮