`appsync` 是否支持订阅中的 `withFilter`?
Does `appsync` support `withFilter` in subscription?
我有一个用 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
);
},
),
},
},
...
在 AppSync 中,您将无法在增量过滤订阅事件时进行记录,但您可以让用户提供过滤依据的属性,以便生成的订阅事件相同。
这里Event
就是你的mutationreturns:
对象的类型
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
随意
- 假设
transactionId
和 userId
在 args
中传递
id
、foo
和 bar
仅当突变也请求这些属性时才会返回
我有一个用 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
);
},
),
},
},
...
在 AppSync 中,您将无法在增量过滤订阅事件时进行记录,但您可以让用户提供过滤依据的属性,以便生成的订阅事件相同。
这里Event
就是你的mutationreturns:
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
随意 - 假设
transactionId
和userId
在args
中传递
id
、foo
和bar
仅当突变也请求这些属性时才会返回