Sunday, 30 July 2017
javascript - jQuery Deferred not calling the resolve/done callbacks in order
Answer
Answer
Code example: http://jsfiddle.net/MhEPw/1/
I have two jQuery Deferred objects.
I want to have more than one 'async' request happening - and after they all run I want the callbacks (the .done functions) to be run in order they were specified in. Unfortunately they don't run in order.
Maybe I am looking for some functionality here that Deferred doesn't provide?
Answer
What you need to do is link all of your request with one master deferred object and register all of your callbacks on its promise. The master deferred object would need to listen to the individual requests and resolve accordingly. The simplest way to achieve this would be to define all of the deferred objects up front to avoid the chicken and egg problem:
var d1 = $.Deferred();
var d2 = $.Deferred();
var def = $.when(d1, d2);
def.done(function() {
alert(1);
});
setTimeout(function() {
d1.resolve();
}, 3000);
def.done(function() {
alert(2);
});
setTimeout(function() {
d2.resolve();
}, 1000);
Fiddle: http://jsfiddle.net/pVVad/
Changing the order of deferred objects definitions is possible but it would make the example much more complicated.
casting - Why wasn't Tobey Maguire in The Amazing Spider-Man? - Movies & TV
In the Spider-Man franchise, Tobey Maguire is an outstanding performer as a Spider-Man and also reprised his role in the sequels Spider-Man...
-
The whole error output being: LNK2019 unresolved external symbol wWinMain referenced in function "int __cdecl __scrt_common_main_seh(vo...
-
I have come across CORS issues multiple times and can usually fix it but I want to really understand by seeing this from a MEAN stack paradi...
-
I recently used canvas to conert images to webp, using : const dataUrl = canvas.toDataURL('image/webp'); But this takes a lots of ti...
No comments:
Post a Comment