AWS Amplify AppSync 订阅:数据返回空
AWS Amplify AppSync Subscription: data returning null
我正在开发我的 Amplify 应用程序,我的订阅工作正常:
graphql:
type Item @model(subscriptions: null)
@auth(rules: [
{allow: owner},
{allow: groups, groups: ["Admin"], operations: [create, update, read, delete] }
]) {
id: ID!
name: String
files: String
}
type Subscription {
itemUpdated(id: ID): Item @aws_subscribe(mutations: ["updateItem"])
}
js:
const handleSubscription = (data) => {
if (data.value.data.itemUpdated) {
setItemObj(data.value.data.itemUpdated);
}
};
useEffect(() => {
const subscription = API.graphql(
graphqlOperation(subscriptions.itemUpdated, {
id,
}),
).subscribe({
next: handleSubscription,
});
return () => subscription.unsubscribe();
}, []);
在 handleSubscription 方法中,当应用程序对项目进行突变调用时,return 数据 (data.value.data.itemUpdated
) 将具有正确的数据。
现在,由于我显然不清楚的原因,我仍然可以看到发生突变时触发订阅事件,但 return 数据 (data.value.data.itemUpdated
) 始终为空。
我已经尝试按照 的建议从 graphql 模式的 auth 字段中删除 {allow: owner}
规则 - 这没有用(另外:我仍然很好奇为什么它会在第一名,但我没有足够的代表发表评论)。
在写这篇文章时,我的想法是我将尝试创建一个没有 {allow: owner}
规则的新项目,然后再试一次,如果可行,我会报告回来,但我的问题将转向提问为什么然后问我如何确保物品对所有者仍然是私人的?最后,我几乎可以肯定我在工作时也有 {allow: owner}
规则,但我可能会弄错。
我也试过:
已通过更新不同的项目字段进行测试
让 amplify cli 重建我的 graphql js 文件
更改了代码,即
- 删除了
return () => subscription.unsubscribe();
- 使输入更具体
API.graphql(graphqlOperation(subscriptions.itemUpdated, {input: { id: id },})
(我确信这无关紧要,但我想尝试一下。)
我只是不确定这里发生了什么。这一切看起来都很简单,我一定是错过了一些愚蠢的东西……我知道我最终会弄清楚的,但我想联系这里的任何人以防万一。
版本:
"aws-amplify": "^3.0.24"
"@aws-amplify/ui-react": "^0.2.15"
"react": "^16.13.1"
amplify-cli: 4.29.0
如果我遗漏了任何重要信息,请告诉我。在此先感谢您的帮助。
好吧.. 就像我想的那样愚蠢。浪费任何人的时间我不好!
API.graphql(
graphqlOperation(subscriptions.itemUpdated, {
id: Id,
}),
).subscribe({
next: handleSubscription,
});
这是 id: Id,
参数。在命名为 id
之前,我有 Id
var 并且 js 允许将 {name: name}
缩短为 { name }
- 我必须更改 id
var 并直接转到 {input: { id: Id },}
这是订阅的错误语法。
真正的蠢货动作,我适当尴尬。即使在测试期间,错误命名的好教训。
我正在开发我的 Amplify 应用程序,我的订阅工作正常:
graphql:
type Item @model(subscriptions: null)
@auth(rules: [
{allow: owner},
{allow: groups, groups: ["Admin"], operations: [create, update, read, delete] }
]) {
id: ID!
name: String
files: String
}
type Subscription {
itemUpdated(id: ID): Item @aws_subscribe(mutations: ["updateItem"])
}
js:
const handleSubscription = (data) => {
if (data.value.data.itemUpdated) {
setItemObj(data.value.data.itemUpdated);
}
};
useEffect(() => {
const subscription = API.graphql(
graphqlOperation(subscriptions.itemUpdated, {
id,
}),
).subscribe({
next: handleSubscription,
});
return () => subscription.unsubscribe();
}, []);
在 handleSubscription 方法中,当应用程序对项目进行突变调用时,return 数据 (data.value.data.itemUpdated
) 将具有正确的数据。
现在,由于我显然不清楚的原因,我仍然可以看到发生突变时触发订阅事件,但 return 数据 (data.value.data.itemUpdated
) 始终为空。
我已经尝试按照 {allow: owner}
规则 - 这没有用(另外:我仍然很好奇为什么它会在第一名,但我没有足够的代表发表评论)。
在写这篇文章时,我的想法是我将尝试创建一个没有 {allow: owner}
规则的新项目,然后再试一次,如果可行,我会报告回来,但我的问题将转向提问为什么然后问我如何确保物品对所有者仍然是私人的?最后,我几乎可以肯定我在工作时也有 {allow: owner}
规则,但我可能会弄错。
我也试过:
已通过更新不同的项目字段进行测试
让 amplify cli 重建我的 graphql js 文件
更改了代码,即
- 删除了
return () => subscription.unsubscribe();
- 使输入更具体
API.graphql(graphqlOperation(subscriptions.itemUpdated, {input: { id: id },})
(我确信这无关紧要,但我想尝试一下。)
- 删除了
我只是不确定这里发生了什么。这一切看起来都很简单,我一定是错过了一些愚蠢的东西……我知道我最终会弄清楚的,但我想联系这里的任何人以防万一。
版本:
"aws-amplify": "^3.0.24"
"@aws-amplify/ui-react": "^0.2.15"
"react": "^16.13.1"
amplify-cli: 4.29.0
如果我遗漏了任何重要信息,请告诉我。在此先感谢您的帮助。
好吧.. 就像我想的那样愚蠢。浪费任何人的时间我不好!
API.graphql(
graphqlOperation(subscriptions.itemUpdated, {
id: Id,
}),
).subscribe({
next: handleSubscription,
});
这是 id: Id,
参数。在命名为 id
之前,我有 Id
var 并且 js 允许将 {name: name}
缩短为 { name }
- 我必须更改 id
var 并直接转到 {input: { id: Id },}
这是订阅的错误语法。
真正的蠢货动作,我适当尴尬。即使在测试期间,错误命名的好教训。