Node.js使用fs.unlink批量删除图片返回的状态数组为空如何解决?
问题根源
- 你调用的
fs.unlink是异步回调式API,回调函数内部的return不会向外传递给外层map作为遍历返回值 map遍历过程仅同步启动所有删除任务,不会等待回调执行就会完成返回,此时返回的数组中没有有效结果,所以得到空数组
修复方案
将回调式API替换为Promise版本的fs.promises.unlink,搭配Promise.all等待所有删除任务执行完成后统一返回状态数组,修改后代码如下:
import fs from 'fs'; import path from 'path'; const pathStatic = path.join(__dirname, "../..", "public"); export const deleteImages = async (images) => { // 生成所有删除任务的Promise数组 const deleteTasks = images.map(async (image) => { try { await fs.promises.unlink(path.join(pathStatic, image)); return { status: 'success', msg: '图片删除成功', url: image }; } catch (err) { return { status: 'error', msg: '图片删除失败', url: image }; } }); // 等待所有任务执行完成后返回完整状态数组 return Promise.all(deleteTasks); }
调用说明
修改后的deleteImages为异步函数,调用时需要配合await或者.then()才能拿到最终的状态数组,调用示例:
// async/await 方式调用 const deleteStatusList = await deleteImages(['test1.jpg', 'test2.png']); console.log(deleteStatusList); // then 方式调用 deleteImages(['test1.jpg', 'test2.png']).then(deleteStatusList => { console.log(deleteStatusList); });
内容的提问来源于stack exchange,提问作者Jose German Perez Sanchez
相关产品推荐
相关产品推荐

