首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >react-native上未触发中继订阅onNext

react-native上未触发中继订阅onNext
EN

Stack Overflow用户
提问于 2019-02-21 12:04:59
回答 1查看 227关注 0票数 1

我是一个订阅设置,但onNext没有被触发,我不确定为什么,因为这是我第一次实现订阅,文档对这个问题没有太大帮助。

下面是代码实现:

代码语言:javascript
复制
import {
  graphql,
  requestSubscription
} from 'react-relay'
import environment from '../network';

const subscription = graphql`
  subscription chatCreatedSubscription{
    chatCreated{
      id
      initiate_time
      update_time
      support_id
      category_id
      email
      name
    }
  }
  `;

function chatCreated(callback) {
  const variables = {};
  requestSubscription(environment, {
    subscription,
    variables,
    onNext: () => {
      console.log("onNext");
      callback()
    },
    updater: () => {
      console.log("updater");
    }
  });
}

module.exports = chatCreated;

这是我的订阅网络

代码语言:javascript
复制
import { Environment, Network, RecordSource, Store } from "relay-runtime";
import Expo from "expo";
import { SubscriptionClient } from "subscriptions-transport-ws";
import { WebSocketLink } from 'apollo-link-ws';
import { execute } from 'apollo-link';
import accessHelper from "../helper/accessToken";

const networkSubscriptions = async (operation, variables) => {
  let token = await accessHelper();
  if (token != null || token != undefined) {
    const subscriptionClient = new SubscriptionClient("ws://localhost:3000/graphql",
      {
        reconnect: true,
        connectionParams: {
          Authorization: token,
        },
      });
    execute(new WebSocketLink(subscriptionClient), {
      query: operation.text,
      variables,
    });
  }
}

const network = Network.create(fetchQuery, networkSubscriptions);
const store = new Store(new RecordSource());

const environment = new Environment({
  network,
  store
});

export default environment;

订阅是在它执行的组件的componentDidMount方法中调用的,但是当向订阅正在侦听的内容添加新信息时,订阅中的onNext方法永远不会被触发。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-26 18:55:36

所以我想我的问题是网络js没有正确设置,以及订阅-传输-ws的版本。我添加了0.8.3版本的包,并对我的网络文件进行了以下更改:

代码语言:javascript
复制
const networkSubscriptions = async (config, variables, cacheConfig, observer) => {
  const query = config.text;
  let token = await accessHelper();
  if (token != null || token != undefined) {
    const subscriptionClient = new SubscriptionClient(`ws://${api}/graphql`,
      {
        reconnect: true,
        connectionParams: {
          Authorization: token,
        },
      });
    subscriptionClient.subscribe({ query, variables }, (error, result) => {
      observer.onNext({ data: result })
    })
    return {
      dispose: subscriptionClient.unsubscribe
    };
  }
}

如果你遇到和我一样的问题,我希望这能对你有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54799082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档