Итак, я понимаю, что это действительно старый пост (4 года!), На который я отвечаю. Но я нашел его, когда искал ответ, который должен был, ретроспективно, быть очевидным, но не отвеченный здесь (и нигде, где я смотрел). Итак, ради очередного бедного шлуба:
Если (как и я), вы не заботитесь о фактической остановке передачи файлов, а просто хотите, чтобы dojo.io.iframe
ПЕРЕМЕЩАЛСЯ с жизнью (эффективно отменяя с точки зрения пользователя), вы можете просто проигнорировать результат отложенных обратных вызовов. Однако, если вы также хотите затем загрузить дополнительные вещи через dojo.io.iframe
, вы также должны сделать так, чтобы dojo.io.iframe
также игнорировал результат. Чтобы сделать это, это раздражает просто ... вызов dojo.io.iframe.send()
возвращает отложенное. Если вы хотите отменить загрузку таким образом, чтобы dojo.io.iframe
выполнял последующие вызовы отправки в очереди (поскольку он может выполнять только один вызов за раз), вам просто нужно вызвать .cancel()
для отложенного вызова, который вернулся после отправки, что в данный момент выполняется.
Как в:
var dfd = dojo.io.iframe.send({...});
var dfd2 = dojo.io.iframe.send({...}); // this send will not start until the first one completes. it is blocked internally by dojo.io.iframe.
...
Теперь пользователь где-то нажимает кнопку отмены, потому что загрузка занимает слишком много времени, или они поняли, что не хотели загружать выбранный файл. Мы не хотим ждать, пока будет завершена первая передача файла, потому что мы больше не заботимся о результате этой передачи.
onclick: function() {
dfd.cancel();
}
Вызов отмены на dfd позволит немедленно выполнить второй send()
вызов. если вы посмотрите в fiddler, вы увидите, что вторая загрузка теперь начинается немедленно, а не ожидает завершения первой (отмененной), как это было бы без вызова .cancel()
для отложенного.
Без отмены первой отсрочки dojo.io.iframe
будет продолжать должным образом ожидать результата первой загрузки, тем самым блокируя любые последующие вызовы send()
в очереди, ожидающие обработки через dojo.io.iframe
.