使用回调函数来更改getJSON外部定义的变量的值

时间:2016-01-19 00:22:40

标签: javascript getjson

好的,所以我有这个功能。

function check(username){
    var result = "default";  
    $.getJSON('https://api.twitch.tv/kraken/streams/' + username, function(data){
      if(data.stream == null)
        result = 'offline';
      else 
        result = 'online';

    }).fail(function(){
        result = 'notfound';
       });

   return result;
}

console.log(check('freecodecamp'));

问题在于我在控制台日志中收到的是"默认",不是"离线",也没有"在线,也没有"未发现"正如我所料。

我试图在check()函数之前移动console.log()行,但它不起作用。我还尝试在全局范围内定义var结果,但它也不起作用。

任何帮助将不胜感激!

1 个答案:

答案 0 :(得分:2)

这是您的代码编写方式:

function check(username, callback){
    var result = "default";  
    $.getJSON('https://api.twitch.tv/kraken/streams/' + username, function(data){
      if(data.stream == null) {
        result = 'offline';
      } else {
        result = 'online';
      }

      callback(result);
    }).fail(function(){
        result = 'notfound';
        callback(result);
    });
}

check('freecodecamp', function (result) {
    console.log(result);
});

这是因为$ .getJSON是一个异步函数,因此它会立即返回,同时通过回调函数提供其输出值。

因此,要获得“返回”值,您需要执行相同的操作,即为$ .getJSON调用自己的回调时调用的函数提供回调。