我想使用屏幕名称(推特)获得klout分数。
我这样做了。我知道这不起作用,但我不知道它应该如何运作。
function get_klout(screenName){
klout.getKloutIdentity(screenName, function(error, klout_user) {
klout.getUserScore(klout_user.id, function(error, klout_response) {
return Math.round(klout_response.score);
});
});
}
我希望我的函数返回此数字Math.round(klout_response.score);
答案 0 :(得分:0)
因为这是一个异步函数,所以不能使用return,以便将异步代码的结果返回给函数回调,并在回调中返回结果。你应该处理回调中的错误。
function get_klout(screenName, callback){
klout.getKloutIdentity(screenName, function(error, klout_user) {
if (err){
callback(error);
return
}
klout.getUserScore(klout_user.id, function(error, klout_response) {
if (err){
callback(error);
return
}
callback(null, klout_response.score);
});
});
}
get_klout(screenName, function(err, res){
if (err){
console.log(err);
return
}
console.log(res);
});
答案 1 :(得分:0)
function get_klout(screenName) {
klout.getKloutIdentity(screenName, function(error, klout_user) {
klout.getUserScore(klout_user.id, function(error, klout_response) {
return Math.round(klout_response.score);
});
});
}
您的函数是异步的,因此您不能只将它返回的内容分配给变量,因为您只需指定undefined:
var result = get_klout('foo'); // undefined
你能做的是:
async functions
node 8+
Promises
callbacks
:function get_klout(screenName, done) {
klout.getKloutIdentity(screenName, function(error, klout_user) {
klout.getUserScore(klout_user.id, function(error, klout_response) {
done(Math.round(klout_response.score));
});
});
}
get_klout('foo', function(response) {
console.log(response);
});
只是一个注释:
在node中是实现error first callback
的常见模式,你应该看看它,因为它是处理错误的传统和更常用的方法:
http://fredkschott.com/post/2014/03/understanding-error-first-callbacks-in-node-js/