返回回调函数的数据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});
});
});
快乐帮助!