Ниже приведен рабочий код для доступа к форме данных. Он использует глобальную переменную '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. Поэтому, пожалуйста, дайте мне знать, если этот подход является правильным :)
Почему вы качения своего собственного посыла: O? –
Чтобы передать переменные предыдущему обратному вызову. Но я знаю, что подход был неправильным. Я исправил это. Просмотрите мой код ниже. P.S: Я новичок в Node.js –
Ваш «новый код» по-прежнему неверен. Не сворачивайте свою собственную реализацию обещаний, это действительно сложно - например, если ваше обещание передается где-то, что вызывает обратный вызов 'then' с обещанием в качестве возвращаемого значения - ваш код ведет себя неправильно. А именно: если вы откатываете «то», вам нужно бросить полный раздутый обещание. –