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

时间:2016-03-04 10:48:01

标签: javascript node.js express callback ejs

我正在使用带有Node.js的500px API模块,并且我试图获取特定用户的照片。我面临着功能,回调和范围的问题......我已经使用了这段代码:


    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

1 个答案:

答案 0 :(得分:6)

我不知道您的应用结构如何,但First Simple解决方案如下:

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

采用更好,更清洁的方法,使用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});
      });
    });

快乐帮助!