我有一个用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
);
},
),
},
},
...
答案 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
是任意名称transactionId
和userId
在args
内部传递id
,foo
和bar
仅在突变也要求这些属性的情况下才会返回