2015-12-31 2 views
0

Ниже приведен рабочий код для доступа к форме данных. Он использует глобальную переменную 'Data', чтобы отправить ее в последнюю функцию обратного вызова. Но я не хочу объявлять глобальную переменную. Так или иначе, я могу передать свои данные каждому обратным вызовам после него? ниже приведен код.Доступ к firebase огнестойким обещаниям локальные переменные в других функциях обещания в Node.js - избегать глобальных

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' с обещанием в качестве возвращаемого значения - ваш код ведет себя неправильно. А именно: если вы откатываете «то», вам нужно бросить полный раздутый обещание. –

ответ

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); 
    }); 
}