Ces derniers jours, j'ai lu beaucoup de posts techniques liés aux "promesses", j'en suis ébloui, et je ne comprends que peu leurs fonctions.
Parlons d'abord du problème. Ajax est le plus utilisé dans le projet. Il y a un problème très désagréable "plusieurs requêtes de dépendance ajax". -free Toutes les méthodes sont synchronisées, mais le résultat est une expérience terrible. La page se fige et le chargement s'arrête. Ce qui est dégoûtant dans l'utilisation d'opérations asynchrones, c'est la couche après couche de rappels et d'opérations dépendantes ultérieures.
function Promise(fn) {
var state = 'pending';
var value;
var deferred = null;
function resolve(newValue) {
if(newValue && typeof newValue.then === 'function') {
newValue.then(resolve, reject);
return;
}
state = 'resolved';
value = newValue;
if(deferred) {
handle(deferred);
}
}
function reject(reason) {
state = 'rejected';
value = reason;
if(deferred) {
handle(deferred);
}
}
function handle(handler) {
if(state === 'pending') {
deferred = handler;
return;
}
var handlerCallback;
if(state === 'resolved') {
handlerCallback = handler.onResolved;
} else {
handlerCallback = handler.onRejected;
}
if(!handlerCallback) {
if(state === 'resolved') {
handler.resolve(value);
} else {
handler.reject(value);
}
return;
}
var ret = handlerCallback(value);
handler.resolve(ret);
}
this.then = function(onResolved, onRejected) {
return new Promise(function(resolve, reject) {
handle({
onResolved: onResolved,
onRejected: onRejected,
resolve: resolve,
reject: reject
});
});
};
fn(resolve, reject);
}
Promise est né pour résoudre le contrôle de flux asynchrone.Le cœur de son utilisation est la méthode then ;
Le code ci-dessus ne gère pas les erreurs et est si long Si les dépendances étaient plus compliquées, vous pouvez imaginer la quantité de code et il est facile de faire des erreurs ;then ressemble à un rappel à première vue, mais la caractéristique de then est qu'elle peut gérer les exceptions et l'écriture en chaîne. quelques Les dépendances de la requête ajax sont les suivantes :
Votre compréhension est fondamentalement correcte. En fait,
Promise
ce n’est pas très simplifié, cela réduit simplement le niveau d’imbrication.Donc, la solution ultime est
Async/Await
, la personne qui pose la question peut vérifier l'information.L'élégance se succède, redressant la forme du sapin de Noël, c'est la contribution de Promises.
Lorsque j'écris un programme, j'ai besoin d'imbriquer sept ou huit rappels, et Promises est bien meilleur.
Si vous pensez qu'écrire est trop compliqué, alors ne l'utilisez pas, utilisez Async/Await