Подождите, пока несколько базовых моделей сохранятся с помощью $ .when.apply - PullRequest
1 голос
/ 31 мая 2019

Я пытаюсь сохранить несколько базовых моделей (не в коллекции) и выполнить код после того, как все они будут сохранены.

Это мой упрощенный код:

var requestsArray = modelsArray.map(function(model) {
    return model.save();
});

$.when.apply(undefined, requestsArray)
    .done(function() {
        console.log('DONE CALLBACK');
        console.log('ARGS', arguments);
     })
    .fail(function() {
        console.log('FAILED');
        console.log('ARGS', arguments);
    });

Но когдаЯ запускаю это - обратный вызов done запускается немедленно, и он не ждет завершения запросов ajax.

Почему это так?

1 Ответ

1 голос
/ 03 июня 2019

Это не происходит напрямую с запросами: (

Я должен был сделать это следующим образом:

var deferredsArray = modelsArray.map(function(model) {
    var dfd = new $.Deferred();
    model.save().then(function() {
          dfd.resolve();
        }, function() {
          dfd.reject();
        });
    return dfd;
});

$.when.apply(undefined, deferredsArray)
    .done(function() {
        console.log('ALL SUCCESSFUL');
    })
    .fail(function() {
        console.log('AT LEAST ONE FAILED');
    });

А когда все будет успешно - тогда метод done$.when вызывается.

...