Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在graphql.js中实现订阅?_Graphql_Graphql Js_Graphql Subscriptions - Fatal编程技术网

如何在graphql.js中实现订阅?

如何在graphql.js中实现订阅?,graphql,graphql-js,graphql-subscriptions,Graphql,Graphql Js,Graphql Subscriptions,这是一个非常简单的问题 如何在graphql中实现订阅? 我特别要求在使用graphql.js构造函数时使用以下内容 我找不到干净/简单的实现 还有一个,但它涉及到relay.js——我不想不必要地增加我的应用程序中外部依赖项的数量 我所拥有的: module.exports = function (database){ return new GraphQLSchema( { query: RootQuery(database) , mutation: RootMutatio

这是一个非常简单的问题

如何在graphql中实现订阅?

我特别要求在使用
graphql.js
构造函数时使用以下内容

我找不到干净/简单的实现

还有一个,但它涉及到
relay.js
——我不想不必要地增加我的应用程序中外部依赖项的数量

我所拥有的:

module.exports = function (database){
  return new GraphQLSchema(
    { query: RootQuery(database)
    , mutation: RootMutation(database)
    , subscription: RootSubscription(database) -- i can see this in graphiql - see below
    }
  );
}
我了解到我需要一个
subscribe()
,它必须从中返回迭代器

这是一个简单的异步迭代器。这个迭代器所做的就是每2秒增加并返回计数器。当它达到10时停止

function simpleIterator(){
  return {
    [ Symbol.asyncIterator ]: () => {
      let i = 0

      return {

        next: async function(){
          i++
          await delay(2000)
          if(i > 10){
            return { done: true }
          }

          return {
            value: i,
            done: false
          }
        }

      }
    }
  }
}
运行graphiql订阅时,由于某些原因,它返回null:

我正在拼凑来自多个来源的代码——基本上是浪费时间和进行黑客攻击。你能帮我弄清楚这个吗? 订阅是一项如此重要的功能,它们在哪里有适当的文档记录?例如,复制粘贴式查询的代码片段在哪里

此外,我不能使用模式与文件分离的示例—作为字符串/从文件中分离。我已经将模式创建为javascript构造函数。现在,由于我试图添加订阅,我不能仅仅返回到使用模式作为字符串。需要重写整个项目。或者我真的可以两者兼得吗?谢谢:)

function simpleIterator(){
  return {
    [ Symbol.asyncIterator ]: () => {
      let i = 0

      return {

        next: async function(){
          i++
          await delay(2000)
          if(i > 10){
            return { done: true }
          }

          return {
            value: i,
            done: false
          }
        }

      }
    }
  }
}