Javascript 访问Node.js中其他promise函数中的firebase局部变量-避免全局

Javascript 访问Node.js中其他promise函数中的firebase局部变量-避免全局,javascript,node.js,firebase,promise,asynccallback,Javascript,Node.js,Firebase,Promise,Asynccallback,下面是访问firebase数据的工作代码。它使用全局变量“Data”数组将其发送到最终回调函数但我不想声明全局变量。那么,我是否可以将数据传递给它之后的每个回调?下面是代码 var data = {}; getData('myKey', function(){ console.log("myCompleteData: "+ data); //both Id and finalData }); var getData= function(key,callback) { return

下面是访问firebase数据的工作代码。它使用全局变量“Data”数组将其发送到最终回调函数但我不想声明全局变量。那么,我是否可以将数据传递给它之后的每个回调?下面是代码

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的新手。因此,请告诉我这种方法是否正确:)

工作代码:

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

为什么要使用自己的承诺:O?这样我就可以将变量传递给上一个回调。但我知道这种方法是不正确的。我已经修好了。请在下面查看我的代码。我是Node.js的新手,你的“新代码”仍然不正确。不要滚动您自己的承诺实现—这真的很难—例如,如果您的承诺被传递到某个调用
的地方,然后
以承诺作为其返回值的回调—您的代码行为不正确。也就是说,如果你滚动
,那么你必须滚动一个完整的承诺impl。你能帮我完成下面的代码吗?