返回回调函数的数据Node.js

问题描述:

我正在使用500px API模块和Node.js,我试图获取特定用户的照片。我面临着功能,回调和范围的问题......我这个代码:返回回调函数的数据Node.js

 

    api500px.photos.getByUsername ('username', {'sort': 'created_at', 'image_size': '3'}, function(error, results) { 
     if (error) { 
      console.log(error); 
      return; 
     } 
     var dataPx = results.photos; 
    }); 

我想离开我的变量dataPx,在我的EJS模板中使用它:

 

    app.get('/materialize', function(req, res) { 
     res.render('materialize.ejs', {dataPx: dataPx}); 
    }); 

如果有人能够向我解释如何做到这一点,以及这种事情在JavaScript中如何工作,那就太酷了!

THX

我不知道如何为您的应用程序的结构,但首先简单的解决方案如下:

app.get('/materialize', function(req, res) {    
    api500px.photos.getByUsername ('username', {'sort': 'created_at', 'image_size': '3'}, function(error, results) { 
     if (error) { 
      console.log(error); 
      return; 
     } 
     var dataPx = results.photos; 
     res.render('materialize.ejs', {dataPx: dataPx}); 
    }); 
    }); 

OR采取更好的和更清洁的方式,使用q library

包装api500px.photos.getByUsername承诺为:

function getUserPhotosAsync() { 
    var deferred = q.defer(); 
     api500px.photos.getByUsername ('username', {'sort': 'created_at', 'image_size': '3'}, function(error, results) { 
      if (error) { 
       deferred.reject(error); 
      } 
      deferred.resolve(results.photos); 
     }); 
    return deferred.promise; 
} 

而且使用它作为:

app.get('/materialize', function(req, res) { 
     getUserPhotosAsync().then(function(dataPx) { //looks cool isn't it? 
     res.render('materialize.ejs', {dataPx: dataPx}); 
     }); 
    }); 

快乐帮助!