类型'Promise <graphqlresult> |中不存在属性'subscribe'。 Observable <对象>'

时间:2018-10-04 10:10:04

标签: angular amazon-web-services ionic2 amazon-dynamodb aws-amplify

在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中,它显示错误,例如无法订阅.....(请参见上面的错误)。

有人知道如何解决吗?

谢谢

4 个答案:

答案 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)
});