在Ionic应用程序中,我们正在集成AWS-Amplify,并且能够插入和获取数据。但是在实现订阅时,我们得到了编译器错误提示
类型“ Promise |不存在属性'subscribe'可观察的”。 属性“订阅”在类型“承诺”上不存在。
在Subscription.ts
export const onCreateEmployee = `subscription OnCreateEmployee(
$employee_id: Int
$employee_name: String
) {
onCreateEmployee(
employee_id: $employee_id
employee_name: $employee_name
) {
employee_id
employee_name
}
}
在Main.ts
const subscription = API.graphql(
graphqlOperation(onCreateEmployee)
).subscribe((eventData) => { console.log(eventData)
});
在main.ts中,它显示错误,例如无法订阅.....(请参见上面的错误)。
有人知道如何解决吗?
谢谢
答案 0 :(得分:0)
这是一种解决方法,但是您可以将Observable转换为Promise
let graphqlCallPromise: Promise<any>;
if(graphqlCall instanceOf Observable) graphqlCallPromise = API.graphql(graphqlOperation(onCreateEmployee)).toPromise();
graphqlCallPromise.then((eventData) => { console.log(eventData) });
答案 1 :(得分:0)
由于 API.graphql()
的结果可以是 Promise
,当您查询数据以立即返回,或者 Observable
用于订阅,您需要告诉 TypeScript 期望什么:< /p>
(API.graphql(
graphqlOperation(onCreateEmployee)
) as unknown as Observable<YourEventDataType>)
.subscribe(
(eventData) => { console.log(eventData) }
);
答案 2 :(得分:0)
如果这个问题是在使用打字稿时特别出现的。您可以通过将其转换为 any
(API.graphql(
graphqlOperation(onCreateEmployee)
) as any).subscribe((eventData) => { console.log(eventData)
});
答案 3 :(得分:-1)
可能graphql
返回一个承诺,而不是可观察的。使用then
缓存结果。
API.graphql(
graphqlOperation(onCreateEmployee)
).then((eventData) => { console.log(eventData)
});