Используя jQuery 3.1.0, я создаю неизвестное число запросов $.ajax()
и добавляю полученные обещания в массив, используя:jQuery 3.1.0 then(), done() и когда() ошибка проглатывания
myArray.push($.ajax(...).promise());
После того, как все запросы будут завершены, я хочу, чтобы вызвать функцию, которую я понимаю, может быть сделано с помощью:
$.when.apply($, myArray).then(myFunction, errorHandlingFunction);
Однако туРипсЫоп бросает ошибку, будучи проглоченного JQuery (во время тестирования вся моя функция была вызвана броском нового Error()
). Я вижу, что выполнение входит в catch после вызова mightThrow()
и правильно отклоняет отложенное, но это никогда не отображается в консоли.
Даже при выполнении следующего действия, которое опускает вызов приложения, происходит полное проглатывание ошибки; отладчик линия также не ударил:
myArray[0].then(function() {
throw new Error('test error');
}, function() { debugger; });
Удаление when()
и выполняя следующие исполнения заставляет сломаться на бросок:
myArray[0].done(() => {
throw new Error('test error');
}).fail(function(){ debugger; });
кажется, что ошибки, возникающие в функции, выполняемые then()
являются всегда проглатывается. Кроме того, $.when(...).done(...)
также приводит к ошибке при проглатывании, если функция внутри done()
выбрасывает.
Я что-то неправильно понял или это ошибка/особенность jQuery?
см. Мой ответ, относящийся к вашему коду: http://stackoverflow.com/a/39206980/104380 – vsync