JavaScript - 仅评估 if 语句的第一部分

标签 javascript json asynchronous conditional-statements

在我的代码中,我循环遍历 Twitch.tv 用户名(称为用户)数组,以对每个用户名进行 API 调用。其代码如下所示:

for(user in users){
  var username = users[user];
  console.log(username); //it iterates over every user in the array
  cbJSON(username); //that means this function is called for each user
}

cbJSON 函数采用一个参数(用户名)并进行 API 调用。然后,如果用户在线、离线或不存在,它应该写入控制台。为此,我使用 if 语句来评估 data.stream 是否为 true、null 或未定义,如下所示:

function cbJSON(name){
  $.getJSON(url + name + cb, function(data){
  var ds = data.stream;

  //Problem: Only the initial if statement works.
  //The else if and else statements are NEVER called

  //Only this works
  if(ds){
    //handle user is online
      //show status, name, game, viewers, resolution

    console.log(name + ' is online.');

    //this is never called, even though it should be
  } else if(ds === null) {
    //handle user is offline
      //show status, logo and name
    console.log(name + ' is offline.');

    //this is never called, even though it should be
  } else {
    //handle user does not exist
      //error message: user does not exist
    console.log(name + ' does not exist.');
  }
  });
}

只要 data.stream 存在且不为 false,ds 的计算结果就应为 true。
当流离线时 ds 等于 null。
当 channel 不存在时,ds 等于 undefined。

如果这个 if 语句似乎被评估,则只有第一部分。如果用户数组中的某人在线,则“用户名在线”将写入控制台。然而,阵列中的大多数用户都处于离线状态,并且其中一个用户不存在,因此这些用户也应该以“用户名离线”和“用户名不存在”的形式写入控制台。

这是一个相当简单的 if 语句,我认为我不会在这里遇到任何麻烦,但我不明白为什么它没有按预期工作。我只是将我的代码笔链接到这里,因为问题可能出在其他地方:http://codepen.io/erody-s/pen/WwagBo?editors=1011

还有一件事:if 语句昨天还可以工作,但从那以后我改变了很多东西,包括如何调用 cbJSON 函数,并且它已经停止正常工作。

我对 JavaScript 还有些陌生,所以很可能我在这里遗漏了一些明显的东西,但我自己无法弄清楚。相信我,我已经尝试过了。

如果有人能够在这方面帮助我,我将非常高兴。

最佳答案

发现错误。

分配 ds 后你做了一堆分配

var ds = data.stream;
var linkStream = ds.channel.url;
var logo = ds.channel.logo;
var displayName = ds.channel.display_name;
var game = ds.game;
var viewers = ds.viewers;
var resolution = ds.video_height;
var preview = ds.preview.small; 

您还说当主播离线时 ds 应该为 null 对吧?好吧,在 Javascript 中,如果您尝试获取 null 或 undefined variable 的属性,您将抛出错误,并且函数的其余部分将不会执行。 所以,我帮你修好了笔:http://codepen.io/josepht404/pen/RaqbRw?editors=1012现在可以了:)。

希望对您有帮助,谢谢。

关于JavaScript - 仅评估 if 语句的第一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36953523/

相关文章:

python - Django REST Framework 序列化程序返回对象而不是数据

python - Celery .delay() 同步工作,不延迟

asynchronous - 为什么我不应该使用 F# 异步工作流来实现并行性?

java - 是否可以在浏览器中编辑计算机上的文件?

javascript - 调试客户端时使用 Chrome/Firefox

javascript - 对 stackexchange api 的 Http 请求返回不可读的 json

node.js - 仅使用一个回调并行运行异步

javascript - AngularJS - 使用指令调用回调函数?

javascript - 将 C# 字符串放入 asp.net-mvc View 中的 javascript 字符串时正确编码

ios - 将 TableView Controller 更改为 Collection View Controller