下面是说明我的问题的伪代码.所有任务完成后,父函数最终必须返回一个promise (为了清楚起见,我省略了其他任务).父函数调用子函数,一些子函数必须递归地执行它们的任务,因此,为了清楚起见,我将它们划分为工作函数.如果有更干净的方法,我很乐意学习.

如何最好地处理本例中的递归?

// This function must ultimately return a Promise.
async function parentFunction(uId) {
    try {
        await childFunction(uId);
        return Promise.resolve(uId);
    } catch (error) {
        console.log(error);
    }
}

async function childFunction(uId) {
    try {
        const done = await workerFunction(uId);

        if (done) {
            return Promise.resolve(true);
        } else {
            // There are more files to delete; best way to handle recursion?
        }
    } catch (error) {
        console.log(error);
    }
}

async function workerFunction(uId) {
    try {
        // Query the database, limit to 100 files.
        const query = await db.queryFiles().limit(100);

        if (query.size == 0) {
            // Nothing to delete, we're done!
            return Promise.resolve(true);
        }

        // Perform an atomic (all-or-none) batch delete that can only take 100 files at most.
        await db.batchDelete(query);
        
        // Batch delete successfull!
        if (query.size < 100) {
            // The query was less than 100 files so there can be no more files to delete.
            return Promise.resolve(true);
        } else {
            // There may possibly be more files to delete.
            // Return a promise or handle recursion here?
            return Promise.resolve(false);
        }
    } catch (error) {
        console.log(error);
    }
}

推荐答案

只要做递归就好了!

async function deleteFiles() {
  const query = await db.queryFiles().limit(100)
  if (query.size > 0) {
    await db.batchDelete(query)
  }
  if (query.size === 100) {
    return deleteFiles()
  }
  return true;
}

Javascript相关问答推荐

无法通过从我的 node 后台创建的预签名URL将PDF上传到S3桶

我可以使用querySelectorAll获取单元格索引吗?

Math.random超出了最大调用堆栈

如何从JavaScript中的公共方法调用私有方法?

如果没有尾随斜线,托管在收件箱中的React/Vite将无法工作

Express.js:使用Passport.js实现基于角色的身份验证时出现太多重定向问题

通过嵌套模型对象进行Mongoose搜索

为什么这个JS模块在TypeScript中使用默认属性导入?""

在grafana情节,避免冲突的情节和传说

当试图显示小部件时,使用者会出现JavaScript错误.

保持物品顺序的可变大小物品分配到平衡组的算法

更新动态数据中对象或数组中的所有值字符串

MarkLogic-earch.suggest不返回任何值

触发异步函数后不能显示数据

AJAX POST在控制器中返回空(ASP.NET MVC)

从逗号和破折号分隔的给定字符串中查找所有有效的星期几

警告框不显示包含HTML输入字段的总和

使用自动识别发出信号(&Q)

如何在Java脚本中对数据进行签名,并在PHP中验证签名?

P5.js中矩形内的圆弧