Return回调函数数据Node.js

Return data of callback function Node.js

我将 500px API 模块与 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 中是如何工作的,那就太棒了!!!

感谢

我不知道你的应用程序结构如何,但第一个简单的解决方案如下:

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

快乐帮助!