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

如何根据mmjObject的数量循环执行Promise.coroutine,替代重复调用addCategories?

嘿,这个问题我太懂了!要根据mmjObject里的次数自动执行你的Promise.coroutine生成器函数,不用手动写三次调用,其实有几种简洁又实用的做法,我给你一步步拆解:

方法1:在生成器内部嵌入循环(最直接)

把循环逻辑直接放到Promise.coroutine包裹的生成器函数里,让它自动根据mmjObject的次数重复执行addCategories,这是最直观的方案:

// 假设你的mmjObject里存储次数的属性是count,比如 mmjObject.count = 3
const runBatchTasks = Promise.coroutine(function*() {
  const totalExecutions = mmjObject.count; // 从对象中获取需要执行的次数
  for (let i = 0; i < totalExecutions; i++) {
    console.log(`正在执行第 ${i + 1} 次任务`);
    yield addCategories(); // 每次循环yield异步操作,等待完成后再执行下一次
  }
});

// 只需要调用一次,内部会自动跑完指定次数
runBatchTasks()
  .then(() => console.log('所有任务都执行完成啦!'))
  .catch(err => console.error('任务执行出错:', err));

这个方案的优势是逻辑高度集中,而且是顺序执行的——上一次addCategories执行完成后,才会启动下一次,非常适合任务之间有依赖的场景。

方法2:生成任务列表,灵活控制执行顺序

如果你需要更灵活的执行策略(比如并行执行所有任务),可以先把要执行的任务整理成列表,再用生成器处理:

顺序执行(和方法1效果一致)

const runSequentialTasks = Promise.coroutine(function*() {
  // 根据次数生成任务函数列表
  const taskList = Array.from({ length: mmjObject.count }, () => addCategories);
  // 逐个执行任务
  for (const task of taskList) {
    yield task();
  }
});

runSequentialTasks().then(/* 处理完成逻辑 */);

并行执行(适合无依赖的任务)

如果你的addCategories调用之间没有依赖关系,想同时启动所有任务来提高效率,可以用Promise.all配合yield:

const runParallelTasks = Promise.coroutine(function*() {
  // 直接生成所有任务的Promise实例
  const taskPromises = Array.from({ length: mmjObject.count }, () => addCategories());
  // 等待所有并行任务完成,拿到所有结果
  const allResults = yield Promise.all(taskPromises);
  console.log('所有并行任务的结果:', allResults);
});

runParallelTasks().then(/* 处理完成逻辑 */);
额外小技巧:如果需要传递参数

要是每次执行addCategories需要不同的参数(比如当前是第几次的索引),直接在循环里传就行:

// 比如把循环索引作为参数传给addCategories
yield addCategories(i);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:00:29