首页 > 解决方案 > 允许订阅返回实体的初始数据

问题描述

我需要订阅来返回请求类型的初始状态。

我的应用程序中有任务系统,一个任务可能有多个状态:CREATED, QUEUED, RUNNING, COMPLETED,CANCELLEDCANCELLING。创建任务时,它具有CREATED状态,然后根据其类型经历多个状态,直到它是COMPLETED.

有一个订阅taskUpdated(id: ID!): Task可以做到它所说的。这是一个订阅解析器:

    taskUpdated: {
      subscribe: async (...args) => {
        try {
          // get initial task state
          const initialTaskData = await resolveTask(args[1].input);

          const cb = withFilter(
            (_, { input }) => {
              const iterator = tasksPubsub.asyncIterator(TASK_UPDATED);

              // Set initial task state in the iterator? 

              return iterator;
            },
            (payload, variables) => {
              return payload.id === variables.input.id;
            },
          );

          return cb.apply(null, args);
        } catch (e) {
          // handle error
          debugger;
        }
      },
    },

如何在迭代器中设置初始任务状态?有人建议围绕迭代器创建一个包装器,这样就可以完成工作,但我不知道从哪里开始,这似乎是一种矫枉过正。这个问题有什么简单的解决方案吗?

PS。由于前端限制,在我的情况下,先阅读然后再进行更新不是一个选项querysubscription

标签: graphqlapollo-servergraphql-subscriptions

解决方案


推荐阅读