Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/462.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何逃避每一个返回真或假_Javascript_Node.js_Firebase Realtime Database - Fatal编程技术网

Javascript 如何逃避每一个返回真或假

Javascript 如何逃避每一个返回真或假,javascript,node.js,firebase-realtime-database,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.user

我需要使此代码正常工作:

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中返回,它会说关于设置多次头的问题,所以这就是为什么我创建了一个像purchasedval这样的变量,但我不知道如何在forEachs完成后设置它。有什么想法吗?

你不能从forEach中挣脱出来。您需要使用普通for循环。

如果
块:

。。。
//定义purchaseval时
var Percaseval=假;
var send=false;
...
如果(!purchasedval&&c.val().product_id==req.body.productId&&reciptSnap.val().status==“打开”){
purchasedval=“true”;
发送=真;
res.send({“alreadypourchased”:purchasedval});
}
否则,如果(!发送){
发送=真;
res.send({“alreadypourchased”:purchasedval});

}
您确定
if
块语句运行一次吗?它可能多次进入if,如果它进入if,我需要返回true。您可以调用
res.send
仅一次
请求
。你想要这个吗?我知道它可以叫一次。。。。我需要的是,如果它进入,即使只有一次返回真的。。。如果代码从未输入,则返回false。。。有什么想法@saeid吗?你可以通过返回
true
来打破a,但这对你没有帮助,除非你重新构造代码,因为你在内部循环中对
进行一次异步调用
——这就是为什么
purchasedval
。在firebase中循环许多for循环是一件非常讨厌的事情(这与Firebase有什么关系?验证一个ID的两个参数的两个值是否存在。如果两个值都存在,则返回true,如果不是FALSE,则返回true。Firebase警告:用户回调引发了异常。错误:发送头后无法设置头。并且…错误结果…应该是true。我认为我需要重新构造代码。您认为呢知道如何实现异步吗?我最后在一个变量上声明了这一点,供感兴趣的人使用