已添加try catch块仍出现Unhandled promise rejection错误如何解决
问题原因
- 你的代码中
Parse.Object.saveAll(results)是异步方法,返回Promise对象,你既没有添加await关键字等待它执行完成,也没有绑定.catch()处理逻辑。 - 外层的try/catch只能捕获当前同步执行流、以及被await的Promise抛出的错误,未被await的saveAll方法抛出的错误会脱离当前try/catch的捕获范围,就会触发未处理的Promise rejection警告。
- 额外优化点:原代码复用同一个emptyArray对象赋值给所有记录的followedBy字段,部分Parse版本可能触发对象引用冲突,建议每个记录单独赋值空数组。
修正后代码
Parse.Cloud.job("updateFollowedBy", async (request) => { try { const date = new Date(); const query = new Parse.Query("Categories"); const results = await query.find({useMasterKey:true}); results.forEach(object => { if (object.get("followedBy")) { object.set("followedBy", []); } }); // 新增await等待保存操作完成,错误会被外层catch捕获,新增useMasterKey避免权限报错 await Parse.Object.saveAll(results, { useMasterKey: true }); return `Successfully updated column on ${date}`; } catch(e) { console.error('更新出错:', e); // 云任务建议抛出错误方便后台识别任务执行状态 throw e; } });
额外注意事项
- 如果你的Categories表记录数超过1000条,默认
query.find只能返回前1000条数据,建议改用query.eachBatch批量处理数据,避免漏更。
内容的提问来源于stack exchange,提问作者Rlaw
相关产品推荐
相关产品推荐

