Table des matières
Promesse de lien
结论
Maison interface Web js tutoriel JavaScript : tenir parole

JavaScript : tenir parole

Sep 01, 2023 pm 03:53 PM

JavaScript : tenir parole

JavaScript, grâce à sa popularité et ses récentes améliorations, devient de plus en plus le meilleur ami des programmeurs Web. Comme tous les meilleurs amis, JavaScript tient ses promesses.

Cela peut paraître un peu étrange, mais c'est vrai. La plupart des navigateurs prennent actuellement en charge les objets dits Promise. Une promesse ressemble beaucoup à une fonction qui représente un morceau de code ou une tâche que vous souhaitez exécuter à un moment donné dans le futur.

Voici à quoi ressemble l'engagement.

var myPromise = new Promise(function (resolve, reject) {
    // Task to carry out goes here.
});
Copier après la connexion

Vous pouvez voir ici que lorsque nous créons une promesse, nous lui donnons un paramètre, qui est une fonction qui contient le code que nous voulons exécuter à un moment donné dans le futur. Vous remarquerez peut-être également les deux paramètres passés à la Promise dans la fonction : resolvereject. Ce sont également des fonctions, et c'est ainsi que nous pouvons indiquer à une promesse si elle est remplie. Voici comment les utiliser :

var myPromise = new Promise(function (resolve, reject) {
    if (true) {
        resolve('Hello Tuts+ fans!');
    } else {
        reject('Aww, didn\'t work.');
    }
});
Copier après la connexion

Cette promesse sera évidemment toujours tenue car if 语句将始终为真。这只是出于学习目的 - 我们稍后会做一些更实际的事情 - 但想象一下用一段您不能 100% 确定是否有效的代码片段替换 true .

Maintenant que nous avons créé une Promesse, comment l'utilisons-nous ? Eh bien, nous devons lui dire quelle est la fonction resolvereject 函数是什么。我们通过使用 Promise 的 then. Nous faisons cela en utilisant la méthode then de Promise.

myPromise.then(function (result) {
    // Resolve callback.
    console.log(result); 
}, function (result) {
    // Reject callback.
    console.error(result);
});
Copier après la connexion

Parce que notre instruction if réussit toujours sa vérification true, le code ci-dessus enregistrera toujours "Bonjour Tuts+Fans !" Il s'exécute également immédiatement. En effet, le code à l'intérieur du constructeur Promise est synchrone, ce qui signifie qu'il n'attend aucune opération. Elle dispose de toutes les informations nécessaires pour procéder, et elle le fera dans les plus brefs délais.

Cependant, là où les promesses brillent vraiment, c'est dans les tâches asynchrones, des tâches pour lesquelles vous ne savez pas exactement quand la promesse sera remplie. Un exemple concret de tâche asynchrone consiste à récupérer une ressource, telle qu'un fichier JSON, via AJAX. Nous ne savons pas combien de temps il faudra au serveur pour répondre, ni s'il risque même de tomber en panne. Ajoutons un peu d'AJAX à notre code Promise.

var myPromise = new Promise(function (resolve, reject) {
    // Standard AJAX request setup and load.
    var request = new XMLHttpRequest();
    
    // Request a user's comment from our fake blog.
    request.open('GET', 'http://jsonplaceholder.typicode.com/posts/1');

    // Set function to call when resource is loaded.
    request.onload = function () {
        if (request.status === 200) {
            resolve(request.response);
        } else {
            reject('Page loaded, but status not OK.');
        }
    };

    // Set function to call when loading fails.
    request.onerror = function () {
        reject('Aww, didn\'t work at all.');
    }

    request.send();
});
Copier après la connexion

Le code ici est simplement du JavaScript standard pour effectuer des requêtes AJAX. Nous demandons une ressource, dans ce cas un fichier JSON à une URL spécifiée, et attendons qu'elle réponde. Nous ne saurons jamais exactement quand. Nous ne voulons évidemment pas arrêter l’exécution du script pour l’attendre, alors que faisons-nous ?

Heureusement, nous avons mis ce code dans une promesse. En le mettant ici, nous disons essentiellement : « Hé, un morceau de code, je dois y aller maintenant, mais je t'appellerai plus tard et je te dirai quand l'exécuter. Promets-moi que tu vas le faire et dis-le ». moi toi Quand est-ce que ça sera fait ?" Le code dira : "Oui, bien sûr."

La chose importante à noter dans le code ci-dessus est l'appel de fonction resolvereject. N'oubliez pas que c'est ainsi que nous indiquons à nos promesses si notre code s'est exécuté avec succès. Sinon, nous ne le saurons jamais.

En utilisant le même code de l'exemple de base, nous pouvons voir comment les requêtes AJAX dans Promise fonctionneront désormais.

// Tell our promise to execute its code
// and tell us when it's done.
myPromise.then(function (result) {
    // Prints received JSON to the console.
    console.log(result);
}, function (result) {
    // Prints "Aww didn't work" or
    // "Page loaded, but status not OK."
    console.error(result); 
});
Copier après la connexion

Je sais que nous pouvons vous faire confiance, myPromise.

Promesse de lien

Maintenant, vous pensez peut-être que les promesses ne sont que des fonctions de rappel sophistiquées avec une meilleure syntaxe. Cela est vrai dans une certaine mesure, mais pour continuer avec notre exemple AJAX, disons que vous devez faire quelques requêtes supplémentaires, chacune basée sur les résultats de la requête précédente. Ou que se passe-t-il si vous devez d'abord traiter JSON ?

Faire cela à l'aide de rappels entraînera de nombreuses imbrications de fonctions, chacune devenant de plus en plus difficile à suivre. Heureusement, dans le monde de Promises, nous pouvons enchaîner ces fonctions comme ceci. Voici un exemple : une fois que nous recevons le JSON du commentaire d'un utilisateur sur notre faux blog, nous devons nous assurer qu'il est entièrement en minuscules avant de faire quoi que ce soit d'autre avec.

myPromise
    .then(function (result) {
        // Once we receive JSON,
        // turn it into a JSON object and return.
        return JSON.parse(result);
    })
    .then(function (parsedJSON) {
        // Once json has been parsed,
        // get the email address and make it lowercase.
        return parsedJSON.email.toLowerCase();
    })
    .then(function (emailAddress) {
        // Once text has been made lowercase,
        // print it to the console.
        console.log(emailAddress);
    }, function (err) {
        // Something in the above chain went wrong?
        // Print reject output.
        console.error(err);
    });
Copier après la connexion

Vous pouvez voir ici que bien que notre appel initial soit asynchrone, il est également possible d'enchaîner des appels synchrones. Toute promesse de resolve 函数中的代码在 then 每个返回时都会被调用。您还会注意到,这里只为整个链指定了一个误差函数。通过将其作为最后一个 then 中的 reject 函数放在链的末尾,链中调用 reject appellera cette fonction.

现在我们对承诺更有信心了,让我们结合上面的承诺创建另一个承诺。我们将创建一个采用新的小写电子邮件地址的电子邮件地址,并(假装)向该地址发送电子邮件。这只是一个说明异步内容的示例 - 它可以是任何内容,例如联系服务器以查看电子邮件是否在白名单上或者用户是否已登录。我们需要将电子邮件地址提供给新的 Promise,但承诺不接受争论。解决这个问题的方法是将 Promise 包装在一个可以执行此操作的函数中,如下所示:

var sendEmail = function (emailAddress) {
    return new Promise(function (resolve, reject) {
        // Pretend to send an email
        // or do something else asynchronous
        setTimeout(function () {
            resolve('Email sent to ' + emailAddress);
        }, 3000);
    });
};
Copier après la connexion

我们在此处使用 setTimeout 调用来简单地伪造一个需要几秒钟才能异步运行的任务。

那么我们如何使用新的承诺创建函数呢?好吧,由于在 then 中使用的每个 resolve 函数都应该返回一个函数,那么我们可以以与同步任务类似的方式使用它。

myPromise
    .then(function (result) {
        return JSON.parse(result);
    })
    .then(function (parsedJSON) {
        return parsedJSON.email.toLowerCase();
    })
    .then(function (emailAddress) {
        return sendEmail(emailAddress)
    })
    .then(function (result) {
        // Outputs "Email sent to stuart@fakemail.biz"
        console.log(result);
    }, function (err) {
        console.error(err);
    });
Copier après la connexion

让我们回顾一下这个流程,总结一下发生了什么。我们最初的 Promise myPromise 请求一段 JSON。当收到该 JSON 时(我们不知道何时),我们将 JSON 转换为 JavaScript 对象并返回该值。

完成后,我们从 JSON 中取出电子邮件地址并将其变为小写。然后我们向该地址发送一封电子邮件,同样我们不知道它何时完成,但当它完成时,我们将向控制台输出一条成功消息。看不到沉重的嵌套。

结论

我希望这是对 Promise 的有用介绍,并为您提供了在 JavaScript 项目中开始使用它们的充分理由。如果您想更详细地了解 Promise,请查看 Jake Archibald 关于这个主题的优秀 HTML5 Rocks 文章。

学习 JavaScript:完整指南

我们构建了一个完整的指南来帮助您学习 JavaScript,无论您是刚刚开始作为 Web 开发人员还是想探索更高级的主题。

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
2 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Repo: Comment relancer ses coéquipiers
4 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Remplacer les caractères de chaîne en javascript Remplacer les caractères de chaîne en javascript Mar 11, 2025 am 12:07 AM

Explication détaillée de la méthode de remplacement de la chaîne JavaScript et de la FAQ Cet article explorera deux façons de remplacer les caractères de chaîne dans JavaScript: le code JavaScript interne et le HTML interne pour les pages Web. Remplacer la chaîne dans le code JavaScript Le moyen le plus direct consiste à utiliser la méthode Remplace (): str = str.replace ("trouver", "remplacer"); Cette méthode remplace uniquement la première correspondance. Pour remplacer toutes les correspondances, utilisez une expression régulière et ajoutez le drapeau global G: str = str.replace (/ fi

Tutoriel de configuration de l'API de recherche Google personnalisé Tutoriel de configuration de l'API de recherche Google personnalisé Mar 04, 2025 am 01:06 AM

Ce tutoriel vous montre comment intégrer une API de recherche Google personnalisée dans votre blog ou site Web, offrant une expérience de recherche plus raffinée que les fonctions de recherche de thème WordPress standard. C'est étonnamment facile! Vous pourrez restreindre les recherches à Y

Exemple Couleurs Fichier JSON Exemple Couleurs Fichier JSON Mar 03, 2025 am 12:35 AM

Cette série d'articles a été réécrite à la mi-2017 avec des informations à jour et de nouveaux exemples. Dans cet exemple JSON, nous examinerons comment nous pouvons stocker des valeurs simples dans un fichier à l'aide du format JSON. En utilisant la notation de paire de valeurs clés, nous pouvons stocker n'importe quel type

10 Highlighters de syntaxe jQuery 10 Highlighters de syntaxe jQuery Mar 02, 2025 am 12:32 AM

Améliorez votre présentation de code: 10 surligneurs de syntaxe pour les développeurs Partager des extraits de code sur votre site Web ou votre blog est une pratique courante pour les développeurs. Le choix du bon surligneur de syntaxe peut améliorer considérablement la lisibilité et l'attrait visuel. T

Créez vos propres applications Web Ajax Créez vos propres applications Web Ajax Mar 09, 2025 am 12:11 AM

Vous voici donc, prêt à tout savoir sur cette chose appelée Ajax. Mais qu'est-ce que c'est exactement? Le terme Ajax fait référence à un regroupement lâche de technologies utilisées pour créer un contenu Web interactif dynamique. Le terme Ajax, inventé à l'origine par Jesse J

8 Superbes plugins de mise en page JQuery Page 8 Superbes plugins de mise en page JQuery Page Mar 06, 2025 am 12:48 AM

Tirez parti de jQuery pour les dispositions de page Web sans effort: 8 plugins essentiels JQuery simplifie considérablement la mise en page de la page Web. Cet article met en évidence huit puissants plugins jQuery qui rationalisent le processus, particulièrement utile pour la création de sites Web manuels

10 tutoriels JavaScript & jQuery MVC 10 tutoriels JavaScript & jQuery MVC Mar 02, 2025 am 01:16 AM

Cet article présente une sélection organisée de plus de 10 didacticiels sur les cadres JavaScript et JQuery Model-View-Controller (MVC), parfait pour augmenter vos compétences en développement Web au cours de la nouvelle année. Ces tutoriels couvrent une gamme de sujets, de Foundatio

Qu'est-ce que & # x27; ceci & # x27; en javascript? Qu'est-ce que & # x27; ceci & # x27; en javascript? Mar 04, 2025 am 01:15 AM

Points de base Ceci dans JavaScript fait généralement référence à un objet qui "possède" la méthode, mais cela dépend de la façon dont la fonction est appelée. Lorsqu'il n'y a pas d'objet actuel, cela fait référence à l'objet global. Dans un navigateur Web, il est représenté par Window. Lorsque vous appelez une fonction, cela maintient l'objet global; mais lors de l'appel d'un constructeur d'objets ou de l'une de ses méthodes, cela fait référence à une instance de l'objet. Vous pouvez modifier le contexte de ceci en utilisant des méthodes telles que Call (), Appliquer () et Bind (). Ces méthodes appellent la fonction en utilisant la valeur et les paramètres donnés. JavaScript est un excellent langage de programmation. Il y a quelques années, cette phrase était

See all articles