You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在deleteProject中调用deleteTranslations提示未定义的技术求助

问题解决思路

核心原因

deleteTranslations 是当前对象的方法,在 deleteProject 内部直接调用时,当前作用域找不到这个变量,因此报“未定义”错误。

解决方案

方案1:用 this 调用对象内部方法

修改 deleteProject 中的调用逻辑,通过 this 指向当前对象的方法:

deleteProject: async({
  user,
  project
}) => {
  const translationsParams = {
    user,
    projectId: project,
    trkeys: [],
  };
  await this.deleteTranslations(translationsParams); // 改用this调用内部方法

  const params = {
    TableName: table,
    Key: {
      PK: getPK('project', user),
      SK: getSK('project', user, project),
    },
  };
  return doDelete(params);
},

注意:如果该方法被单独解构出来调用(比如 const { deleteProject } = obj; deleteProject()),this 会丢失指向,此方案不适用。

方案2:提取独立函数

把 deleteTranslations 写成独立函数,再在对象中引用,避免作用域问题:

// 先定义独立的删除翻译函数
const deleteTranslations = async({
  user,
  projectId,
  trkeys
}) => {
  const deletePromises = trkeys.map(async(trkey) => {
    const params = {
      ...getBaseParams(),
      Key: {
        PK: getPK('trans', user, projectId),
        SK: getSK('trans', user, projectId, trkey),
      },
    };
    return doDelete(params);
  });
  return Promise.all(deletePromises);
};

// 在对象中引用该函数
const yourDBHandlers = {
  deleteTranslations,
  deleteProject: async({
    user,
    project
  }) => {
    const translationsParams = {
      user,
      projectId: project,
      trkeys: [],
    };
    await deleteTranslations(translationsParams); // 直接调用独立函数

    const params = {
      TableName: table,
      Key: {
        PK: getPK('project', user),
        SK: getSK('project', user, project),
      },
    };
    return doDelete(params);
  },
};

方案3:提前给对象赋值变量

先将对象赋值给变量,内部通过变量调用方法:

const yourDBHandlers = {
  deleteTranslations: async({
    user,
    projectId,
    trkeys
  }) => {
    const deletePromises = trkeys.map(async(trkey) => {
      const params = {
        ...getBaseParams(),
        Key: {
          PK: getPK('trans', user, projectId),
          SK: getSK('trans', user, projectId, trkey),
        },
      };
      return doDelete(params);
    });
    return Promise.all(deletePromises);
  },

  deleteProject: async({
    user,
    project
  }) => {
    const translationsParams = {
      user,
      projectId: project,
      trkeys: [],
    };
    await yourDBHandlers.deleteTranslations(translationsParams); // 通过对象变量调用方法

    const params = {
      TableName: table,
      Key: {
        PK: getPK('project', user),
        SK: getSK('project', user, project),
      },
    };
    return doDelete(params);
  },
};

额外提示

当前代码中 trkeys 传入的是空数组,deleteTranslations 不会删除任何翻译。要实现“删除项目下所有翻译”的需求,需要先查询该项目对应的所有 trkey,再将这些值传入函数。

内容的提问来源于stack exchange,提问作者shanemcg992

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 09:52:55