我需要使此代码有效:
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内部返回,它将说明要设置许多时间的问题,因此这就是为什么我会创建一个像publatedVal这样的变量,但我不知道如何在foreach完成后将其设置。有什么想法吗?
您可以为您的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 });
}
如果要在res.send
之后跳过forEach
,则可以使用Array.prototype.every
,并且在if
内部可以使用break
。但是我最好的报价是使用Async
或Promises
范式之类的模块
您不能脱离foreach。您需要使用普通循环。