如何将响应数据存储到节点js中当前函数之外的数组中?
How to store response data into an array out of the current function in node js?
我如何将所有结果数据存储到 pImages 数组中?我得到了结果,但在那种情况下,我认为异步函数可以工作,但我不知道如何应用它。请帮忙,我的密码是
exports.addImage = (req, res, next) => {
let imageArray = req.files.productImageArray;
if (!req.files || Object.keys(req.files).length === 0) {
return res.status(400).send("No files were uploaded.");
}
// here all images will be stored in array format
let pImages = [];
for (let f in imageArray) {
imagekit.upload(
{
file: imageArray[f].data, //required
fileName: imageArray[f].name, //required
customMetadata: {
color: req.body.productLabels[f],
default: req.body.defaultProduct[f]
}
},
function(error, result) {
if (error) console.log(error);
else {
console.log(result)
pImages.push(result)
}
}
);
}
console.log("p", pImages); //output p []
};
提前致谢
您可以将 imagekit.upload(...) 包裹在一个承诺中,然后等待这个承诺。
因此,您的承诺必须在 imagekit.upload 的回调中得到解决或拒绝。
请注意,您的 addImage 方法现在必须异步才能使用 await 关键字,因此 returns 本身就是一个承诺。
exports.addImage = async (req, res, next) => {
let imageArray = req.files.productImageArray;
if (!req.files || Object.keys(req.files).length === 0) {
return res.status(400).send("No files were uploaded.");
}
// here all images will be stored in array format
let pImages = [];
for (let f in imageArray) {
try{
const pImage = await new Promise((resolve,reject)=>{
imagekit.upload(
{
file: imageArray[f].data, //required
fileName: imageArray[f].name, //required
customMetadata: {
color: req.body.productLabels[f],
default: req.body.defaultProduct[f]
}
},
function(error, result) {
if (error){
reject(error);
} else {
resolve(result)
}
}
);
});
pImages.push(pImage);
} catch(e){
console.error(e);
}
}
console.log("p", pImages); //output p []
};
您的代码中还有其他内容我没有解决。
在第一行中,您正在访问 req.files.productImageArray,而没有检查是否定义了 req.files。此检查在事后完成。所以你应该在检查后移动你的第一行。
req.files.productImageArray是一个如名字所说的数组吗?如果是这样,你不应该使用 for in 循环,而是使用 for of 循环,在你的健全性检查中你应该包括 Array.isArray(req.files.productImageArray).
我如何将所有结果数据存储到 pImages 数组中?我得到了结果,但在那种情况下,我认为异步函数可以工作,但我不知道如何应用它。请帮忙,我的密码是
exports.addImage = (req, res, next) => {
let imageArray = req.files.productImageArray;
if (!req.files || Object.keys(req.files).length === 0) {
return res.status(400).send("No files were uploaded.");
}
// here all images will be stored in array format
let pImages = [];
for (let f in imageArray) {
imagekit.upload(
{
file: imageArray[f].data, //required
fileName: imageArray[f].name, //required
customMetadata: {
color: req.body.productLabels[f],
default: req.body.defaultProduct[f]
}
},
function(error, result) {
if (error) console.log(error);
else {
console.log(result)
pImages.push(result)
}
}
);
}
console.log("p", pImages); //output p []
};
提前致谢
您可以将 imagekit.upload(...) 包裹在一个承诺中,然后等待这个承诺。
因此,您的承诺必须在 imagekit.upload 的回调中得到解决或拒绝。
请注意,您的 addImage 方法现在必须异步才能使用 await 关键字,因此 returns 本身就是一个承诺。
exports.addImage = async (req, res, next) => {
let imageArray = req.files.productImageArray;
if (!req.files || Object.keys(req.files).length === 0) {
return res.status(400).send("No files were uploaded.");
}
// here all images will be stored in array format
let pImages = [];
for (let f in imageArray) {
try{
const pImage = await new Promise((resolve,reject)=>{
imagekit.upload(
{
file: imageArray[f].data, //required
fileName: imageArray[f].name, //required
customMetadata: {
color: req.body.productLabels[f],
default: req.body.defaultProduct[f]
}
},
function(error, result) {
if (error){
reject(error);
} else {
resolve(result)
}
}
);
});
pImages.push(pImage);
} catch(e){
console.error(e);
}
}
console.log("p", pImages); //output p []
};
您的代码中还有其他内容我没有解决。
在第一行中,您正在访问 req.files.productImageArray,而没有检查是否定义了 req.files。此检查在事后完成。所以你应该在检查后移动你的第一行。
req.files.productImageArray是一个如名字所说的数组吗?如果是这样,你不应该使用 for in 循环,而是使用 for of 循环,在你的健全性检查中你应该包括 Array.isArray(req.files.productImageArray).