Я использую Firefox 32 и Chrome 37 с Mithril.js
и теперь неоднократно спотыкался опечатками в именах переменных, просто заставляя JS прекращать выполнение в точке ссылки. Это особенно неприятно для меня, исходя из C и Java, поскольку я привык к тому, что компилятор ловил такие тривиальные ошибки, прежде чем я даже попытаюсь запустить код.ReferenceError изнутри Цепочка обещаний Мифрила молча игнорируется
я сузил проблему, происходит только в функциях работает как часть посыла цепи AJAX, как это:
function getListData(ctl) {
ctl.data([]);
ctl.loading(true);
return m.request({ method: "GET", url: apiBase, background: true }).then(done,fail);
function done(rspdta) {
xctl.loading(false);
ctl.data(rspdta.Customer);
m.redraw();
};
function fail(rspdta) {
ctl.loading(false);
ajaxError(ctl);
m.redraw();
throw rspdta; // continue error condition
};
}
Обратите внимание, в функции done
намеренное xctl.loading(false)
- сценарий просто, как представляется, остановитесь там, но бросьте ReferenceError
. Однако ничего не регистрируется.
Я
работаю на том, чтобы доказать
доказали, что это поимки и игнорируется Mithril.js
сейчас, в этом коде:
function thennable (ref, cb, ec, cn) {
if ((typeof val == 'object' || typeof val == 'function') && typeof ref == 'function') {
try {
// cnt protects against abuse calls from spec checker
var cnt = 0
ref.call(val, function (v) {
if (cnt++) return
val = v
cb()
}, function (v) {
if (cnt++) return
val = v
ec()
})
} catch (e) {
/**/console.log("[**] Caught in thennable: %o",e);
val = e
ec()
}
} else {
cn()
}
};
Надеюсь, кто-то из этого сообщества будет в состоянии сказать, имею ли я что-то не так, неправильно использую цепочку обещаний (??) или если это ошибка в Mithril.js
0.1.21.
Можете указать, что опечатка в вашем коде выше? Я ничего не замечаю с такими короткими/запутывающими именами – Ian
@Ian: Код выше правильный, извините, если это вводит в заблуждение - я показывал структуру кода с '' use strict '', в результате чего я ожидаю, что он даст ошибка для необъявленных 'var'. Просто изменить любой 'rspdta', скажем,' rpsdta', достаточно, чтобы скрипт просто прекратил выполнение в этот момент. Это почти так, как если бы исключение было выброшено, попавшее в цикл событий, но не сообщается. –
Ну, тогда я смущен вашей проблемой. Если я не ошибаюсь, нет ничего плохого в отношении ** доступа к ** «неопределенным» переменным (поскольку они могут быть глобальными). ** Установка ** неопределенных переменных не допускается в строгом режиме. Это то, о чем вы думаете? – Ian