0

我正在尝试设置一个基本的 graphQL 订阅,以便根据Nader Dabit 的书这篇 Medium 帖子中的食谱,在创建消息时更新消息列表,而我的订阅永远不会在客户端中触发。奇怪的是,在 Amplify 管理 UI 的查询编辑器中,订阅按预期触发。然而,在应用程序中,它是蟋蟀。没有错误,什么都没有。

据我所知,我的版本唯一不寻常的是打字稿(以及//@ts-ignore考虑到 SDK 缺少 Observable 类型所需的 's )。

创建消息:

  const handleMessageSubmit = async () => {
    try {
      const response = await API.graphql(
        graphqlOperation(mutations.createMessage, {
          input: {
            authorID: userState.person.id,
            text: message,
            messageGroupID,
          },
        }),
      );
    } catch (err) {
      console.log(err);
    }
  };

订阅:

 useEffect(() => {
    const subscription = API.graphql(
      graphqlOperation(subscriptions.onCreateMessage),
      // @ts-ignore
    ).subscribe({
      next: (event: any) => {
        console.log('new message:', event);
      },
      error: (error: any) => {
        console.log(error);
      },
    });

    return () => {
      console.log('unsubscribing');
      // @ts-ignore
      subscription.unsubscribe();
    };
  }, [messages]);
4

1 回答 1

0

原来这是我的进口问题。

不正确:从“@aws-amplify/api”导入 API

正确:从“@aws-amplify”导入 { API}

不正确的 API 对其他 graphQL 查询工作得很好,但它正在破坏订阅。

我还应该注意,失败是AWSAppSyncProvider.ts:204 Uncaught (in promise) undefined在控制台中产生了一个错误,我之前没有注意到,尽管这对找到解决方案没有多大帮助。

于 2021-03-16T13:29:37.850 回答