如何解决Express 为我提供了一个空数组 Push 在 ipfs 函数中调用日志工作正常
router.post('/up',verify,async (req,res) => {
if (req.files.upload.length > 0) {
var result = [];
req.files.upload.forEach((uploadFile) => {
ipfs.add(Buffer.from(uploadFile.data),function (err,upfile) {
if (err) {
console.log(err)
} else {
// THIS WORK
console.log({ "name": uploadFile.name,"cid": upfile[0].path });
// THIS NOT
result.push({ "name": uploadFile.name,"cid": upfile[0].path });
}
})
});
res.send(result);
}});
我得到一个空结果。我该如何解决?原因是什么?我真的不明白……
解决方法
您在循环内调用的异步 ipfs.add
函数是异步的。因此,res.send()
在这些调用返回之前 执行。
下面是一个异步方法示例,用于并行(或至少并行)执行多个 ipfs.add
调用,同时将结果收集到单个数组中。
(async () => {
const content = [
'a','b','c'
]
const results = await Promise.all(
content.map(async (item) => await ipfs.add(item))
)
console.log(results)
})()
因此,对于您的代码,类似这样的事情-尽管您需要像以前一样重新添加错误检查并格式化返回对象。扩展地图功能以提高可读性。
const result = await Promise.all(
req.files.upload.map(async (uploadFile) => {
return await ipfs.add(Buffer.from(uploadFile.data));
})
)
res.send(result);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。