函数nodejs中的函数

时间:2017-07-04 16:26:51

标签: node.js klout

我想使用屏幕名称(推特)获得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);

2 个答案:

答案 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

你能做的是:

  1. async functions
  2. 中使用node 8+
  3. 使用Promises
  4. 使用callbacks
  5. 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/