我的主要目的是使此功能起作用:
每当用户单击“喜欢”按钮或“喜欢”按钮时,它将向服务器发布新数据,然后服务器应该更新数据库中“喜欢”和“喜欢”的数量。之后,它将重定向到另一个URL,以获取具有新更新的“喜欢”和“不喜欢”数量的上一页。
在此过程中,由于JS的异步影响,我决定使用Promise.all。但是我陷入了那部分(在我的代码中用3个问号标记)。有人可以帮我修改它或给我更好的建议吗?
这是我的Node.js代码:
app.post("/searchresult/comments/likes", function(req, res) {
var likes = req.body.likes;
var dislikes = req.body.dislikes;
var Text = req.body.text;
var Arr = [likes, dislikes];
Promise.all(Arr.map(function (attribute) {
return new Promise(function (resolve, reject) {
comments.update({text: Text}, {$set: {???: attribute}}, function(err){
if (err) {
console.log(err);
} else {
console.log("Update successfully!");
resolve(comments);
}
});
}).then(function(r){
console.log("DONE!");
res.redirect("/searchresult");
})
}));
});
// ********************************************* ****更新! **************************************************** //
非常感谢Ganesh Karewad,James和dasfdsa。我已经使其正常工作。
答案 0 :(得分:0)
很抱歉,误解了Q。 您可以事先准备数组。
let likeObj = {like:req.body.likes};
let dislikeObj = {dislike:req.body.dislikes};
let Arr = [likeObj, dislikeObj];
Promise.all(Arr.map(function (attribute) {
return new Promise(function (resolve, reject) {
comments.update({text: Text}, {$inc: attribute}, function(err){
if (err) {
console.log(err);
} else {
console.log("Update successfully!");
resolve(comments);
}
});
})
答案 1 :(得分:0)
使用对象数组代替直接值,例如 var Arr = [{key:'likes',value:likes},{key:'dislikes',value:dislikes}];
app.post("/searchresult/comments/likes", function(req, res) {
var likes = req.body.likes;
var dislikes = req.body.dislikes;
var Text = req.body.text;
var Arr = [{key:'likes',value:likes},{key:'dislikes',value:dislikes}];
Promise.all(Arr.map(function (attribute) {
return new Promise(function (resolve, reject) {
comments.update({text: Text}, {$set: {attribute.key: attribute.value}},
function(err){
if (err) {
// reject or log error according to need
console.log(err);
// reject(err);
} else {
console.log("Update successfully!");
resolve(comments);
}
});
}).then(function(r){
console.log("DONE!");
res.redirect("/searchresult");
}).catch(function(err){
// reject or log error according to need
// console.log(err);
reject(err);
})
}));
});