函数 nodejs 中的函数

functions in functions nodejs

我想使用屏幕名称 (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);
    });
  });
}

我希望我的函数return这个数字Math.round(klout_response.score);

因为这是一个异步函数,您不能使用 return,以便 return 将异步代码的结果传递给您的函数回调并 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);
});
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);
    });
  });
}

你的函数是异步的,所以你不能只将它 ​​returns 分配给一个变量,因为你只会分配未定义的: var result = get_klout('foo'); // undefined

您可以做的是:

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