私は Firefox 32 と Chrome 37 を使用しMithril.js
ていますが、変数名のタイプミスに何度もつまずき、参照の時点で JS の実行が静かに停止するだけです。コードを実行しようとする前に、コンパイラがそのような些細な間違いをキャッチすることに慣れているため、C と Java から来た私にとっては特にイライラします。
次のように、AJAX promise チェーンの一部として実行されている関数でのみ発生する問題を絞り込みました。
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
};
}
関数の意図的な部分に注意してくださいxctl.loading(false)
。done
スクリプトはそこで停止しているように見えますが、aReferenceError
がスローされます。ただし、何も記録されません。
私は、このコードで、それがキャッチされ、無視されていることを証明する方法に取り組んでいます: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()
}
};
そのコミュニティの誰かが、私が何か間違ったことをしたのか、Promise チェーンを誤用しているのか (??)、Mithril.js
それとも 0.1.21 のバグなのかを教えてくれることを願っています。