Сравните ответ API с самим собой - PullRequest
0 голосов
/ 30 мая 2020

Я пытаюсь:

  • Опрашивать publi c API каждые 5 секунд
  • Сохранять полученный JSON в переменной
  • Сохранять следующий запрос к этому же API во второй переменной
  • Сравните первую переменную со второй
  • Напечатайте вторую переменную, если она отличается от первой
  • Иначе: напечатайте фраза: «Объекты такие же», если они не изменились

К сожалению, часть сравнения не работает. Я понимаю, что в этой реализации, вероятно, отсутствует соответствующая область видимости переменных, но я не могу понять это. Мы будем очень признательны за любые советы.

  data: {
    chatters: {
        viewers: {
        },
    },
  },
};

//prints out pretty JSON
function prettyJSON(obj) {
  console.log(JSON.stringify(obj, null, 2));
}

// Gets Users from Twitch API endpoint via axios request
const getUsers = async () => {
  try {
    return await axios.get("http://tmi.twitch.tv/group/user/sixteenbitninja/chatters");
  } catch (error) {
    console.error(error);
  }
};

//Intended to display 
const displayViewers = async (previousResponse) => {
  const usersInChannel = await getUsers();
  if (usersInChannel.data.chatters.viewers === previousResponse){
      console.log("The objects are the same");
  } else {      
      if (usersInChannel.data.chatters) {
            prettyJSON(usersInChannel.data.chatters.viewers);
            const previousResponse = usersInChannel.data.chatters.viewers;
            console.log(previousResponse);
            intervalFunction(previousResponse);
        }
   } 

};

// polls display function every 5 seconds
const interval = setInterval(function () {
    // Calls Display Function
    displayViewers()
}, 5000);```

1 Ответ

0 голосов
/ 30 мая 2020

Проблема в том, что вы используете оператор равенства === для объектов. два объекта равны, если они имеют одинаковую ссылку. Хотя вы хотите узнать, идентичны ли они. Проверьте это:

console.log({} === {})

Для вашего варианта использования вы можете захотеть сохранить строковую версию previousResponse и сравнить ее с строковой версией нового объекта (usersInChannel.data.chatters.viewers), например:

    console.log(JSON.stringify({}) === JSON.stringify({}))

Примечание: Также могут возникнуть проблемы с этим подходом, если порядок свойств изменяется в ответе. В этом случае вам нужно будет проверить отдельные свойства в объектах ответа.

...