0

我想使用网名 (twitter) 获得 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);

4

2 回答 2

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);
});
于 2017-07-04T16:32:42.047 回答
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);
    });
  });
}

您的函数是异步的,因此您不能将它返回的内容分配给变量,因为您只会分配未定义的: var result = get_klout('foo'); // undefined

你可以做的是:

  1. 使用async functionsnode 8+
  2. 使用Promises
  3. 使用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);
});

请注意:在节点中是实现的常见模式error first callback,您应该看看它,因为它是处理错误的传统且更常用的方法:http: //fredkschott.com/post/2014/03/understanding-error-第一个回调-in-node-js/

于 2017-07-04T16:36:16.667 回答