appsync在订阅中支持`withFilter`吗?

时间:2020-06-02 07:43:34

标签: amazon-web-services graphql aws-appsync

我有一个用Apollo Server用nodejs编写的graphql。以下是subscription代码。如您所见,它使用了withFilter,它带有两个函数参数。

在第一个函数中,它接受参数并调用pubSub.subscribe('TRANSACTION_REQUEST' + args.transactionId)来订阅主题。请注意,主题名称是动态名称,其中包括来自用户请求的交易ID。

在第二个函数中,它过滤出不匹配的userId。

所以我的问题是如何在Appsync中实现这两个功能。

const resolvers = {
...
  Subscription: {
    requestTransaction: {
      subscribe: withFilter(
        (rootValue: any, args: any, context: any, info: any) => {
          console.log('req txn with filter args', args);
          return pubSub.subscribe('TRANSACTION_REQUEST' + args.transactionId)(
            rootValue,
            args,
            context,
            info,
          );
        },
        (transactionResponse: any, transactionRequest: any) => {
          console.log('with filter transaction');
          console.log('subscribe:', transactionResponse, transactionRequest);
          return (
            transactionResponse.userId ===
            transactionRequest.transactionInput.userId
          );
        },
      ),
    },
  },
...

1 个答案:

答案 0 :(得分:0)

在AppSync中,您将无法在逐步过滤订阅事件时记录日志,但是可以让用户提供要过滤的属性,以使最终的订阅事件相同。

Event只是您的突变返回的对象的类型:

type Subscription {
    subscribeTransaction(topic: String userId: String): Event
            @aws_subscribe(mutations: ["fooMutation"])
}

开始订阅:

subscription onTransact {
    subscribeTransaction(topic: "TRANSACTION_REQUEST" + args.transactionId userId: args.userId){
        id
        foo
        bar
    }
}

注意:

  • onTransact是任意名称
  • 假设transactionIduserIdargs内部传递
  • idfoobar仅在突变也要求这些属性的情况下才会返回
相关问题