Quelle est la différence entre Promise et AJAX?
À la fois des promesses et des appels AJAX sont des opérations asynchrones. Un GET/POST demande pourrait être faite avec les deux. << Edit: c'est une FAUSSE déclaration
Alors, quelle est la différence entre eux? Et quand il serait préférable d'utiliser l'un plutôt que l'autre?
Aussi, une chose de plus:
Récemment, j'ai rencontré une promesse qui avait un AJAX dans son corps. Pourquoi mettre une opération asynchrone à l'intérieur d'une opération asynchrone? C'est comme mettre un pain pain dans un pain sandwich.
function threadsGet() {
return new Promise((resolve, reject) => {
$.getJSON('api/threads')
.done(resolve)
.fail(reject);
})
}
jQuery est utilisé ici. Et l'appel AJAX a promis le comportement et les propriétés. Je n'ai pas plus tôt, mais voici mes réflexions:
Nous pouvons faire quelque chose dans la Promesse. Ensuite, utilisez l'appel AJAX et dans le done
fonction de transmettre l'résolu Promesse de la logique. Plus précisément, dans cet exemple, il n'y a aucun.
Maintenant je vois que j'avais confondu les deux. Ils sont assez bien 2 choses différentes. Juste parce qu'ils sont asynchrones, ne signifie pas qu'ils sont interchangeables.
==============
EDIT 2: Juste certains matériaux, j'ai trouvé utile:
source d'informationauteur Bruno
Vous devez vous connecter pour publier un commentaire.
Vous êtes confus au sujet des promesses et des appels Ajax. Ils sont un peu comme les pommes et les couteaux. Vous pouvez couper une pomme avec un couteau et le couteau est un outil qui peut être appliquée à une pomme, mais ce sont deux choses très différentes.
Promesses sont un outil pour la gestion des opérations asynchrones. Ils gardent une trace de quand les opérations asynchrones complète et quels sont leurs résultats et vous permettent de coordonner la réalisation et les résultats (y compris les conditions d'erreur) avec d'autres codes ou d'autres opérations asynchrones. Ils ne sont pas réellement des opérations asynchrones en eux-mêmes. Un appel Ajax est une opération asynchrone qui peut être utilisé avec le traditionnel interface de rappel ou enveloppé dans une promesse de l'interface.
Un appel Ajax est un type spécifique de l'opération asynchrone. Vous pouvez faire un appel Ajax soit avec un traditionnel rappel à l'aide du
XMLHttpRequest
de l'interface ou vous pouvez faire un appel Ajax (dans les navigateurs modernes), à l'aide d'une promesse avec l'fetch()
de l'interface.Vous n'avez pas d'afficher le code spécifique vous étiez en train de parler, mais parfois vous voulez démarrer l'opération asynchrone 1 et puis lorsque que l'opération asynchrone est fait, vous voulez commencer opération asynchrone 2 (souvent en utilisant les résultats de la première). Dans ce cas, vous aurez généralement imbriquer l'un dans l'autre.
Votre exemple de code ici:
est considéré comme une promesse anti-modèle. Il n'y a pas de raison de créer une nouvelle promesse ici parce que
$.getJSON()
retourne déjà une promesse à laquelle vous pouvez revenir. Vous pouvez faire ceci à la place:Ou, si vous voulez "cast" le quelque peu non-standard jQuery promesse d'une norme promesse, vous pouvez le faire: