Attendre la fin, après de multiples promesses en parallèle à l'aide de jQuery
Je veux la file d'attente de plusieurs asynchrone des requêtes ajax en utilisant différé/promesse de la mise en œuvre de jquery:
function doSomething() {
console.log('doSomething')};
function makeMultiAjaxRequests1() {
console.log('makeMultiAjaxRequests1')};
function makeMultiAjaxRequests2() {
console.log('makeMultiAjaxRequests2')};
var step1 = function () {
var promise = new $.Deferred().promise();
makeMultiAjaxRequests1();
return promise; }
var step2 = function () {
var promise = new $.Deferred().promise();
makeMultiAjaxRequests2();
return promise; }
step1()
.then(step2())
.done(doSomething());
$.when(step1(),
step2())
.done(function () {
doSomething();
});
Ici est la violon lien. Donc ma question est:
Dans le modèle où step1 et step2 sont exécutés en parallèle, le code n'est pas d'atteindre la dernière fonction de gestionnaire. Pourquoi?
Où en êtes-vous réellement la résolution de la promesse? Si vous ne déclenchent pas le gestionnaire, le rappel ne sera pas appelé...
Le Deferreds dans
Ya c'est vrai, mais ce qui est le cas dans le précédent exemple séquentiel? La promesse n'est pas résolu et encore à la fin du code.
Le Deferreds dans
step1()
et step2()
ne sont jamais résolus.Ya c'est vrai, mais ce qui est le cas dans le précédent exemple séquentiel? La promesse n'est pas résolu et encore à la fin du code.
OriginalL'auteur crishushu | 2013-12-09
Vous devez vous connecter pour publier un commentaire.
Vous avez besoin pour résoudre le
deferred
obj dans step1 et step2Essayer cette
reporter et de la promesse à la fois avons alors fait des méthodes. Mais la promesse n'avez pas de résoudre méthode.
ma question concerne le comportement de la séquence du cas (step1().ensuite(étape 2).fait(doSomething);). Il ne fait aucune différence si nous retourner l'objet reporté ou si nous revenons à sa promesse, ce qui va exécuter doSomething()
vous avez raison il n'est pas différent dans ce cas. Juste envie de taper moins de lettres.
OriginalL'auteur Daiwei
@Daiwei donne une bonne réponse.
Un commun essentiel d'être évoqué est https://gist.github.com/sergio-fry/3917217 par sergio-fry.
Si vous voulez avoir une approche plus dynamique où vous ne savez pas à l'avance combien d'arguments, vous êtes en cours d'exécution parallèle, voici un bon exemple de l'extension de JQuery (1.10+):
Voir le code en action avec une dynamique d'exemple:
http://jsbin.com/nuxuciwabu/edit?js console
OriginalL'auteur mraxus
Elle n'atteignent votre
done
fonction de si vous lui donnez une URL, il peut effectivement atteindre (dans le cas de jsfiddle, qui serait dire/echo/html/
: http://jsfiddle.net/LnaPt/2/Fondamentalement, vous avez juste besoin de faire cela:
OriginalL'auteur Ryley