Как может определенная функция быть неопределенной? - PullRequest
2 голосов
/ 09 марта 2020

При запуске программы javascript в браузере произошла загадочная ошибка. Я не ожидал, что это будет возможно.

  1. Это консольное сообщение Firefox, когда выполнение было прервано. Строка кода запуска Tne указана:
TypeError: saveOrderFunc(...) is undefinedmish-project-9e3368b0606d05c921e4bcce069c6187.js:6233:24 (<***)
    doFindText http://localhost:3000/assets/mish-project-9e3368b0606d05c921e4bcce069c6187.js:6233
    invoke http://localhost:3000/assets/vendor-2ec1510f3a7e6a9956d317f82db731b5.js:66502
    flush http://localhost:3000/assets/vendor-2ec1510f3a7e6a9956d317f82db731b5.js:66392
    flush http://localhost:3000/assets/vendor-2ec1510f3a7e6a9956d317f82db731b5.js:66601
    _end http://localhost:3000/assets/vendor-2ec1510f3a7e6a9956d317f82db731b5.js:67177
    end http://localhost:3000/assets/vendor-2ec1510f3a7e6a9956d317f82db731b5.js:66863
    _runExpiredTimers http://localhost:3000/assets/vendor-2ec1510f3a7e6a9956d317f82db731b5.js:67314
    _runExpiredTimers self-hosted:874
Вот код программы, представленный списком отладки кода Firefox с указанием строки кода запуска, когда выполнение было прервано:
...
var saveOrderFunc = function saveOrderFunc(namelist) {
  return new Ember.RSVP.Promise(function (resolve, reject) {
    (0, _jquery.default)("#sortOrder").text(namelist);
    var IMDB_DIR = (0, _jquery.default)('#imdbDir').text();
    var xhr = new XMLHttpRequest();
    xhr.open('POST', 'saveorder/' + IMDB_DIR);
    xhr.onload = function () {
      if (this.status >= 200 && this.status < 300) {
        userLog("SAVE");
        resolve(true);
      } else {
        userLog("SAVE error");
        reject({
          status: this.status,
          statusText: xhr.statusText
        });
      }
    };
    xhr.send(namelist);
  }).catch(function (error) {
    console.error(error.message);
  });
};
Ember.run.later(function () {
  saveOrderFunc(nameOrder.trim()).then(function () {   //  (<***)
    if (n && n <= 100 && loginStatus === "guest") {
      Ember.run.later(function () {
        (0, _jquery.default)("div[aria-describedby='dialog'] button#yesBut").click();
      }, 20);
    }

  });
}, 400);
...

Может ли это быть системной ошибкой Ember или как дела?

$ ember -v ember-cli: 3.11.0 узел: 8.17.0 os: linux x64

Почему такой старый Ember? Сначала нужно обновить Node. Почему такой старый нод? Несколько зависимых пакетов все еще отстают; отложили следующее обновление на несколько месяцев.

1 Ответ

0 голосов
/ 09 марта 2020

решено:

Функция saveOrderFun c не всегда выполнялась, чтобы вернуть обещание, поэтому все объясняется как мой недосмотр.

Спасибо, улучшу мое внимание в отношении Обещаний!

...