Ждать асинхронного метода внутри синхронного метода? - PullRequest
0 голосов
/ 01 ноября 2018

Вот ситуация:

У меня есть 2 функции JS, и мне нужно подождать, пока эти 2 метода сделают другие вещи.
Итак, я написал:

$.when(foo1(), foo2()).done(function () {
    //do something
});

Это хорошо работает.

Однако в некоторых случаях foo2() должен загружать частичное представление в моем DOM:

function foo2() {
    $("#bar").load('/controller/action')
}

Кажется, что код внутри обратного вызова .done выполняется в конце foo1() и foo2() , тогда как частичное представление не загружено полностью .

Как я могу сказать foo2() дождаться окончания загрузки частичного представления, прежде чем сказать: «Хорошо, я закончил свою работу, вы можете продолжить»?

1 Ответ

0 голосов
/ 01 ноября 2018

К сожалению load() не возвращает обещание или отложенный объект. Вместо этого, чтобы сделать эту работу, вы можете вручную вернуть отложенный объект из foo2(), который вы разрешите после завершения load(). Примерно так:

function foo2() {
  var deferred = $.Deferred()
  $("#bar").load('/controller/action', function() {
    deferred.resolve();
  });
  return deferred;
}
...