2015-12-31 51 views
0

以下是訪問Firebase數據表單的工作代碼。它使用全局變量'Data'數組將它發送給最終的回調函數。 但我不想聲明全局變量。那麼無論如何,我可以將我的數據傳遞給每個回調後?下面是代碼。在Node.js中的其他承諾函數中訪問firebase fireproof promise局部變量 - 避免全局性

var data = {}; 

getData('myKey', function(){ 
console.log("myCompleteData: "+ data); //both Id and finalData 
}); 

var getData= function(key,callback) { 
    return fireproof.child("data").child(key) 
    .then(CUSTOM_getData) 
    .then(callback) 
} 

function CUSTOM_getData(snapshot) { 

     var id= snapshot.val().id; 
     data.id= id; 

    return { 
    then: function(callback) { 

    fireproof.child("otherData").child(data.id) 
    .then(CUSTOM_getSomethingFromId) 
    .then(callback) 
     } 

    }; 
} 

function CUSTOM_getSomethingFromId(snapshot) { 

      var finalData = snapshot.val().finalData; 
      data.finalData = finalData; 

     return { 
     then: function(callback) { 

     callback(data); 
      } 
     }; 
} 

而我是Node.js的新手。所以,請讓我知道,如果這種做法是正確的:)

+1

爲什麼你滾你自己的諾言:o? –

+0

這樣我就可以將變量傳遞給前一個回調函數。但我知道這種做法是不正確的。我解決了這個問題。請在下面查看我的代碼。 P.S:我是Node.js的新手 –

+0

您的「新代碼」仍然不正確。不要推出自己的承諾實現,這確實很難 - 例如,如果您的承諾被傳遞到某處調用'then'回調並將承諾作爲其返回值 - 您的代碼行爲不正確。也就是說 - 如果你滾動「然後」,你必須展示一個完整的承諾impl。 –

回答

0

工作代碼:

var getSomeData = function(key,callback) { 

    var data = {}; 

    fireproof.authWithCustomToken(nconf.get('config:someToken')).then(function(){ 

     return fireproof.child("data").child(key) 

    }).then(function(snapshot){ 

      data.id= snapshot.val().id; 

      return fireproof.child("otherData").child(data.id) 

    }).then(function(snapshot){ 

      data.finalData = snapshot.val().finalData; 

      callback(data); 

    }, function(error){ 
      console.log('Error: '+error); 
    }); 
}