我需要让这段代码有效:
router.post('/checkProduct',function(req,res) {
ref.child("recipts").once("value",function(usersSnap) {
var purchasedval = "";
usersSnap.forEach(function (reciptsSnap) { //for every user
if(reciptsSnap.key === req.body.userId) {
reciptsSnap.forEach(function (reciptSnap) {
reciptSnap.ref.child("latest_receipt_info").once("value",function(b) {
purchasedval = "false";
b.forEach(function (c) {
if(c.val().product_id === req.body.productId && reciptSnap.val().status === "on") {
purchasedval = "true";
}
});
});
});
}
});
return res.send({ "alreadyPurchased" : purchasedval })
});
});
if部分实际上已完成但返回“”。如果我在if中返回,它会说关于设置多次标题的问题,所以这就是为什么我创建一个像purchaseval这样的变量,但我不知道如何在forEachs完成之后设置它。有什么想法吗?
答案 0 :(得分:1)
您可以为if
阻止执行此操作:
...
// when you define purchaseval
var perchaseval = false;
var send = false;
...
if(!purchasedval && c.val().product_id === req.body.productId && reciptSnap.val().status === "on") {
purchasedval = "true";
send = true;
res.send({ "alreadyPurchased" : purchasedval });
}
else if(!send) {
send = true;
res.send({ "alreadyPurchased" : purchasedval });
}
如果您想在forEach
res.send
后跳过Array.prototype.every
,可以使用if
,在break
内,您可以使用Async
。
但我最好的提议是使用像Promises
或{{1}}范例
答案 1 :(得分:0)
你无法突破forEach。你需要使用普通的for循环。