如何逃脱foreach返回真或错误



我需要使此代码有效:

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。但是我最好的报价是使用AsyncPromises范式之类的模块

您不能脱离foreach。您需要使用普通循环。

最新更新