如何逃避forEach返回true或false

时间:2017-01-02 05:33:32

标签: javascript node.js firebase-realtime-database

我需要让这段代码有效:

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完成之后设置它。有什么想法吗?

2 个答案:

答案 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循环。