ключи объекта не определены в условии if, но внутри оператора if я могу получить к нему доступ - PullRequest
0 голосов
/ 29 сентября 2018

Как гласит заголовок, у меня есть переменная, которая является объектом javascript, я сравниваю ее с другим объектом js, упорядочивая их.Проблема в том, что переменная полностью доступна без вызова ключей, поэтому эти if(JSON.stringify(response) == JSON.stringify(lastcmd)) if(JSON.stringify(response.id) == JSON.stringify(lastcmd)) работают отлично, но доступ к ключу id в lastcmd вызовет выдачу неопределенного значения.if(JSON.stringify(response) == JSON.stringify(lastcmd.id))

ссылка на полный код здесь

Редактировать: вот JSON

{ "id" : "001", "app": "msgbox", "contents": { "title": "Newpaste", "message": "I'm a edited paste!" } }

Edit2: вот код на почту

const { BrowserWindow, app, dialog, ClientRequest } = require("electron");
const axios = require("axios");
const url = require("url");

let win = null;
let lastcmd;

function grabCurrentInstructions(fetchurl) {
  return axios
    .get(fetchurl)
    .then(response => {
      // handle success
      //console.log(response.data);
      return response.data;
    })
    .catch(function(error) {
      // handle error
      console.log(error);
    });
}

function boot() {
  //console.log(process.type);
  win = new BrowserWindow({
    resizable: true,
    show: false,
    frame: false
  });
  win.loadURL(`file://${__dirname}/index.html`);

  //Loop everything in here every 10 seconds

  var requestLoop = setInterval(getLoop, 4000);
  function getLoop() {
    grabCurrentInstructions("https://pastebin.com/raw/i9cYsAt1").then(
      response => {
        //console.log(typeof lastcmd);
        //console.log(typeof response);
        if (JSON.stringify(response.app) == JSON.stringify(lastcmd.app)) {
          console.log(lastcmd.app);
          clearInterval(requestLoop);
          requestLoop = setInterval(getLoop, 4000);
        } else {
          lastcmd = response;
          switch (response.app) {
            case "msgbox":
              dialog.showMessageBox(response.contents);
              //console.log(lastcmd);
              clearInterval(requestLoop);
              requestLoop = setInterval(getLoop, 1000);
          }
        }
      }
    );
  }
}
app.on("ready", boot);

А вот и ошибка:

(node:7036) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'id' of undefined
    at grabCurrentInstructions.then.response (C:\Users\The Meme Machine\Desktop\nodejsprojects\electronrat\index.js:42:64)
    at process._tickCallback (internal/process/next_tick.js:68:7)

1 Ответ

0 голосов
/ 29 сентября 2018

Спасибо пользователю str Я увидел, что мой lastcmd был неопределенным, когда я запускал сравнение в первый раз, это сломало бы его и тем самым зацикливало одну и ту же ошибку снова и снова, добавляя

grabCurrentInstructions("https://pastebin.com/raw/i9cYsAt1").then(
    response => {
      lastcmd = response;
    }
  );

ниже этой строки

  win.loadURL(`file://${__dirname}/index.html`);

Я убедился, что последняя команда, отправленная в то время, когда приложение находилось в автономном режиме, не будет выполняться при запуске и , одновременно решая мою проблему!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...