1
我的猫鼬函数忽略承诺查询瞬间下降到年底,而无需等待另一个步骤猫鼬承诺不工作
exports.editProduct = (id, data) => {
Product.findById(id)
.then((data) => {
var imgS3arr = data.img;
var tempArr = [];
var i = imgS3arr.length
while (i--) {
if (!imgS3arr[i].match(/https:\/\/s3.eu-central-1.amazonaws.com\/es-shop\//g)) {
tempArr.push(imgS3arr[i])
imgS3arr.splice(i, 1)
}
}
return tempArr
})
.then((tempArr) => {
var tempArrS3 = []
return Promise.all(tempArr.map((img, i) => {
return fetch.remote(img).then((base) => {
var buf = Buffer.from(base[0], 'base64');
var imgS3 = {
Key: data.title.replace(/()|(")/g, "_") + "_" + Math.random().toString(36).substring(2),
Body: buf,
ContentEncoding: 'base64',
ContentType: 'image/jpeg'
};
return s3Bucket.putObject(imgS3).promise().then((data) => {
tempArrS3.push('https://s3.eu-central-1.amazonaws.com/es-shop/' + imgS3.Key)
console.log(tempArrS3)
}).catch((err) => {
throw err;
});
});
}))
.then((tempArrS3) => {
edited.title = data.title;
edited.img = imgS3arr.concat(tempArrS3);
return edited
});
})
.then((edited) => {
console.log(edited)
return edited.save();
});
}
There is a point where I call this function
我想,我使用的承诺不正确
可以将某些有人帮助我解决这个问题吗?
你应该是'返回Product.findById(ID)'或'(ID,数据)=> Product.findById(ID)',因为你的外部函数定义没有返回一个Promise。如果初始调用不是“返回”,那么从链中最后一项返回一个Promise没有意义。 –
请在编写代码时特别注意JavaScript。将你的代码分成逻辑函数。使用回调/承诺使其不可读取非常快。你错过了一些'.catch'寿,这可能是一个问题。 –