gpt4 book ai didi

javascript - Promise.all 错误处理——让一个 Promise 的结果在另一个 Promise 的 catch 中可访问?

转载 作者:行者123 更新时间:2023-11-30 14:02:46 24 4
gpt4 key购买 nike

我正在编写一个简单的构建脚本来编译一些文件。剩下的唯一问题是错误处理。它有效,但我想在错误消息中添加其他内容。这是有问题的代码片段:

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)。唯一的问题是 execstdout 没有引用它使用的文件。所以错误信息变得困惑。我想要以下内容:

p.catch(e => console.log(`error happened in ${file}:`, e))

我不确定如何从 catch 中访问文件变量。有什么想法吗?

最佳答案

调用函数时直接加上catch:

  for (let file of files) {
promises.push(
exec(compile(file))
.then(result => [result, file])
.catch(error => [error, file])
);
}

Promise.all(promises).then(results => {
//...
});

关于javascript - Promise.all 错误处理——让一个 Promise 的结果在另一个 Promise 的 catch 中可访问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56028155/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com