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});
});
});
快乐帮助!
我将 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});
});
});
快乐帮助!