▶️При попытке сделать вот так ничего не получается:
var result = "";
someInput.onchange = function() {
result = someInput.value;
};
$.get("someapi", function (data) {
result = data.foo;
});
some.api.call(42, function (data) {
result = data.bar;
});
someDiv.textContent = result;
Почему-то в
someDiv ничего не отображается.▶️Проблема в том, что в коде нет операции ожидания. Ни подписка на событие, ни AJAX-вызов, ни даже вызов API не ждут поступления данных - а сразу же передают управление дальше. Поэтому строка
someDiv.textContent = result; выполняется ДО того, как переменная result получит значение.Способов сделать это присваивание после получения значения несколько:
— переместить присваивание внутрь
— вынесение присваивания в именованную функцию
— обратные вызовы (
callbacks)— обещания (
promises)— наблюдаемые значения (
observables) в Knockout— наблюдаемые значения (
observables) в MobX📎 Подробнее об этом всём
@javascriptv
