NodeJS 如何解决AWS AppSync Mutation超时问题?

pnwntuvh  于 2023-06-22  发布在  Node.js
关注(0)|答案(1)|浏览(138)

我有一个lambda,它可以执行mutation来删除一堆项,但总是会发生超时问题。
这是我用来从dynamoDB中删除项的函数。我向deleteExpiredFcm函数传递一个要删除的对象列表。从日志消息中,我知道这个突变有某种冲突,导致了超时问题。另外,我实现了分页以避免超时问题,因为对象列表可能包含数百甚至数千个项。我错过了什么?

async function deleteExpiredFcm(expiredFcm) {
  console.log("Deleting expired FCM...");
  const batchSize = 10; // Adjust the batch size as needed
  const totalBatches = Math.ceil(expiredFcm.length / batchSize);

  for (let i = 0; i < totalBatches; i++) {
    const batch = expiredFcm.slice(i * batchSize, (i + 1) * batchSize);

    const mutationPromises = batch.map(async (element) => {
      const mutationObj = deleteExpiredFcmObj;
      const variables = {
        input: {
          id: element.id,
        },
      };

      let retries = 3; // Number of retries
      let success = false;

      while (retries > 0 && !success) {
        try {
          const { data } = await client.mutate({
            mutation: mutationObj,
            variables: variables,
          });
          console.log(
            "(Mutation): Deleting Data ----------->",
            data.deleteFcmNotification
          );
          success = true;
        } catch (error) {
          if (
            error.graphQLErrors.some(
              (err) => err.errorType === "ConflictUnhandled"
            )
          ) {
            console.log("Conflict occurred, retrying...");
            retries--;
          } else {
            console.error("Error deleting FCM:", error);
            break;
          }
        }
      }
    });

    await Promise.all(mutationPromises); // Await the completion of each batch
  }
}

编辑:我在mutation输入中添加了_version,所以它现在会删除项目。然而,我仍然得到超时问题,{“errorMessage”:“2023-06- 13 T12:56:25.895Z 7 c81 deb 4-ccea-4cf 0-ac 59-f72 c5 e1 becf 9任务在3.05秒后超时”}
我怎么才能摆脱它?

vaj7vani

vaj7vani1#

为了解决GraphQL错误,我在mutation输入中添加了_version。

const variables = {
    input: {
      id: element.id,
      _version: element._version,
    },
};

为了解决超时问题,我只是在lambda通用配置中增加了超时限制。这解决了目前的问题。请让我知道是否有更合适的方法来解决超时问题。

相关问题