эстафетная подписка на СЛЕДУЮЩАЯ не срабатывает на реагирующую - PullRequest
0 голосов
/ 21 февраля 2019

Я настроен на подписку, но onNext не запускается. Я не уверен, почему, так как это моя первая реализация подписки, и документы не сильно помогли с этой проблемой.

Вот реализации кода:

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;

и вот моя сеть для подписки

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 внутри подписки никогда не запускается, когда новыйинформация добавляется к тому, что подписка слушает.

1 Ответ

0 голосов
/ 26 февраля 2019

, поэтому я понял, что моя проблема была в том, что сеть не была правильно настроена, и в версии subscription-transport-ws.я добавил версию 0.8.3 пакета и сделал следующие изменения в моем сетевом файле:

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
    };
  }
}

Я надеюсь, это поможет вам, если вы застряли с той же проблемой, что и моя.

...