This question already has answers here:
How do I return the response from an asynchronous call?
(42个答案)
4年前关闭。
我将500px API模块与Node.js结合使用,并且试图获取特定用户的照片。我遇到函数,回调和作用域的问题...我有以下代码:
api500px.photos.getByUsername('username',{'sort':'created_at','image_size':'3'},function(error,results){
如果(错误){
console.log(错误);
返回;
}
var dataPx = results.photos;
});
我想找出我的变量
app.get('/ materialize',function(req,res){
res.render('materialize.ejs',{dataPx:dataPx});
});
如果有人可以解释我该怎么做以及这种事情在JavaScript中是如何工作的,那将很酷!
谢谢
或采用更好,更清洁的方法,请使用q library,
将
并将其用作:
快乐的帮助!
(42个答案)
4年前关闭。
我将500px API模块与Node.js结合使用,并且试图获取特定用户的照片。我遇到函数,回调和作用域的问题...我有以下代码:
api500px.photos.getByUsername('username',{'sort':'created_at','image_size':'3'},function(error,results){
如果(错误){
console.log(错误);
返回;
}
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
包装为一个 promise :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});
});
});
快乐的帮助!
关于javascript - 返回回调函数Node.js的数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/35794070/
10-11 05:28