При использовании этого кода:
document.addEventListener("keydown", function(e) {
if (e.keyCode == 9)
{
storage.get("items", function(obj) { // this is an asynchronous call
if (some_condition(obj)) {
e.preventDefault();
e.stopPropagation();
}
});
}
}
если some_condition
(в зависимости от результата асинхронного вызова) имеет значение True, e.preventDefault();
и e.stopPropagation();
будут выполнены слишком поздно , поскольку storage.get
является асинхронным.
Какую опцию можно решить, следует ли вызывать warnDefault () после результата асинхронного вызова?
Я думал об этом решении:
document.addEventListener("keydown", function(e) {
if (e.keyCode == 9)
{
e.preventDefault(); // always preventDefault and stopPropogation,
e.stopPropagation(); // we'll maybe restore it later
storage.get("items", function(obj) { // this is an asynchronous call
if (!some_condition) {
e.reenableDefault(); // contrary of preventDefault
e.restartPropagation(); // contrary of stopPropagation
}
});
}
}
но, очевидно, нет функции e.restartPropagation();
!
Примечание: я уже прочитал Как включить event.preventDefault? , но это не помогло в этом контексте.