如何解决返回对象的地图中的未决承诺?
How to resolve pending promises within map returning an object?
这将解决所有承诺
const promises = files.map(filename => getPdfToPrint(`output\${outputDirectory}\` , filename.replace("/", "")));
const res = await Promise.all(promises)
但现在 files.map
函数应该将文件名映射到这样的对象
const promises = files.map(filename => { return {status: getPdfToPrint(`output\${outputDirectory}\` , filename.replace("/", "")), filename: filename}});
const res = await Promise.all(promises)
为了检查承诺是否解决了“成功”,以便我知道检索和打印了哪些文件。但是通过这种方式,解决状态的 Promise 仍然是未决的。
我该如何解决这个问题?
如果我没理解错的话,你的 getPdfToPrint()
return 是一个承诺。目前,您正在将每个 filename
映射到由 getPdfToPrint()
编辑的承诺 return,但您希望在对象中的键 status
处获得已解析的值与filename
。为此,您可以进行 .map()
回调 async
。这将做两件事:首先,它将使您能够 await
getPdfToPrint()
函数 Promise 获取已解析的值,以便您可以在您正在 returning 的对象内部使用它。其次,它将使您的回调函数 return 成为一个 Promise(因为所有 async
函数 return 成为一个 Promise)。这将允许您使用 Promise.all()
来检测所有承诺是否已解决:
const promises = files.map(async filename => {
const pdf = await getPdfToPrint(`output\${outputDirectory}\` , filename.replace("/", ""));
return {status: pdf, filename};
});
const res = await Promise.all(promises);
这将解决所有承诺
const promises = files.map(filename => getPdfToPrint(`output\${outputDirectory}\` , filename.replace("/", "")));
const res = await Promise.all(promises)
但现在 files.map
函数应该将文件名映射到这样的对象
const promises = files.map(filename => { return {status: getPdfToPrint(`output\${outputDirectory}\` , filename.replace("/", "")), filename: filename}});
const res = await Promise.all(promises)
为了检查承诺是否解决了“成功”,以便我知道检索和打印了哪些文件。但是通过这种方式,解决状态的 Promise 仍然是未决的。 我该如何解决这个问题?
如果我没理解错的话,你的 getPdfToPrint()
return 是一个承诺。目前,您正在将每个 filename
映射到由 getPdfToPrint()
编辑的承诺 return,但您希望在对象中的键 status
处获得已解析的值与filename
。为此,您可以进行 .map()
回调 async
。这将做两件事:首先,它将使您能够 await
getPdfToPrint()
函数 Promise 获取已解析的值,以便您可以在您正在 returning 的对象内部使用它。其次,它将使您的回调函数 return 成为一个 Promise(因为所有 async
函数 return 成为一个 Promise)。这将允许您使用 Promise.all()
来检测所有承诺是否已解决:
const promises = files.map(async filename => {
const pdf = await getPdfToPrint(`output\${outputDirectory}\` , filename.replace("/", ""));
return {status: pdf, filename};
});
const res = await Promise.all(promises);