我正在编写一个简单的构建脚本来编译一些文件。剩下的唯一问题是错误处理。它可以工作,但是我想在错误消息中添加其他内容。这是相关代码的片段:
const promises = []
for (let file of files) {
promises.push(Promise.all([exec(compile(file)), Promise.resolve(file)]))
}
Promise.all(promises.map(p => p.catch(e => console.log(e))))
.then(result => {
/* result is now an array with the following pattern:
[[stdout, filename], [stdout, filename], ...]
*/
});
exec
函数返回一些stdout
,其中包含未说明使用哪个文件的数据。因此,我添加了一个Promise.all
,其中同时包含exec函数和一个promise,它们可以立即解析并返回文件名。当我需要将文件写入系统时,我需要从exec返回的数据和文件名。因为无论任何错误,我仍然希望最后一个then
运行,所以我分别处理每个文件的错误(因此,.map
)。唯一的问题是stdout
中的exec
没有引用它使用的文件。因此错误消息变得混乱。我想要以下内容:
p.catch(e => console.log(`error happened in ${file}:`, e))
我不确定如何从catch
中访问文件变量。有什么想法吗?
答案 0 :(得分:1)
您应在调用函数时直接添加捕获:
for (let file of files) {
promises.push(
exec(compile(file))
.then(result => [result, file])
.catch(error => [error, file])
);
}
Promise.all(promises).then(results => {
//...
});
答案 1 :(得分:1)
您可能希望将Allow
放在相应catch
仍在范围内的循环中:
file