firebase循环问题

时间:2017-05-10 19:24:16

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

我有这段代码:

    setProductsToUser: function(productsArr, userId) {
      console.log('***********************************************');

      channelsToActivate = {}
      count = 0

for (var i = 0; i < productsArr.length; i++) {
         console.log('ref.child(user_products).child('+userId+').child('+productsArr[i]+').set(true);')
         count++
         ref.child('products').child(productsArr[i]).once('value', function(productSnap) {
            count--
            console.log(count)
            if(productSnap.val()){
               for (key in productSnap.val().channels) {
                  channelsToActivate[key] = true
                  console.log(channelsToActivate)
               }
               if (count == 0){
                for (key in channelsToActivate) {
                console.log('ref.child(system_user).child('+key+').child('+userId+').set(true);')                  
                console.log('ref.child(user_system).child('+userId+').child('+key+').set(true);')

             }
          }
       } 
    })

}

我发送了这样的代码:

productsM.setProductsToUser(['com-dummy-dummy-1month'], '2HWdYcvGydTYdrxn2ZGCFsGYV8J2')

productsM.setProductsToUser(['com-dummy-dummy-3months'], '2Wv6tZWC4EO0cb2JivqXLu53S4q1')

输出结果为:

   ***********************************************
    ref.child(user_products).child(2HWdYcvGydTYdrxn2ZGCFsGYV8J2).child(com-dummy-dummy-1month).set(true);
    ***********************************************
    ref.child(user_products).child(2Wv6tZWC4EO0cb2JivqXLu53S4q1).child(com-dummy-dummy-3months).set(true);
    0
    { '-KUrkIm_pxcACN_ONuWd': true }
    -KUrkIm_pxcACN_ONuWd
    ref.child(system_user).child(-KUrkIm_pxcACN_ONuWd).child(2HWdYcvGydTYdrxn2ZGCFsGYV8J2).set(true);
    ref.child(user_system).child(2HWdYcvGydTYdrxn2ZGCFsGYV8J2).child(-KUrkIm_pxcACN_ONuWd).set(true);
    -1
    { '-KUrkIm_pxcACN_ONuWd': true }

应该是:

***********************************************
ref.child(user_products).child(2HWdYcvGydTYdrxn2ZGCFsGYV8J2).child(com-dummy-dummy-1month).set(true);
0
{ '-KUrkIm_pxcACN_ONuWd': true }
-KUrkIm_pxcACN_ONuWd
ref.child(system_user).child(-KUrkIm_pxcACN_ONuWd).child(2HWdYcvGydTYdrxn2ZGCFsGYV8J2).set(true);
ref.child(user_system).child(2HWdYcvGydTYdrxn2ZGCFsGYV8J2).child(-KUrkIm_pxcACN_ONuWd).set(true);
***********************************************
ref.child(user_products).child(2Wv6tZWC4EO0cb2JivqXLu53S4q1).child(com-dummy-dummy-3months).set(true);
0
{ '-KUrkIm_pxcACN_ONuWd': true }
-KUrkIm_pxcACN_ONuWd
ref.child(system_user).child(-KUrkIm_pxcACN_ONuWd).child(2Wv6tZWC4EO0cb2JivqXLu53S4q1).set(true);
ref.child(user_system).child(2Wv6tZWC4EO0cb2JivqXLu53S4q1).child(-KUrkIm_pxcACN_ONuWd).set(true);

我成功地将最后一个输出放置了一个4秒的setTimeout:

productsM.setProductsToUser(['com-dummy-dummy-1month'], '2HWdYcvGydTYdrxn2ZGCFsGYV8J2')

setTimeout(function() {
productsM.setProductsToUser(['com-dummy-dummy-3months'], '2Wv6tZWC4EO0cb2JivqXLu53S4q1')
}, 4000);

如何在每次通话中都没有超时的情况下达到所需的输出? (我会在代码中为该函数循环一百次 - setProductsToUser)为什么计数器转到-n?

0 个答案:

没有答案