Quelques scénarios d'application courants de la promesse frontale
Cet article résumera les scénarios d'application courants de Promise dans notre développement de projet en fonction de ma propre utilisation d'ES6 Promise. Bien sûr, Promise n'est peut-être pas la seule option, mais en tant que développeur front-end qualifié, nous devons comprendre. il.
Promise.all
Syntaxe : Promise.all (itérable)
Paramètre : un objet itérable, tel qu'un Array.
Valeur de retour :
Si l'itérable passé est vide, c'est une promesse qui a été résolue.
Promise.all([]).then(res=>{ console.log(res)//[] })
Une promesse qui se résout de manière asynchrone (si l'Iterable passé ne contient pas de promesse). Notez que Google Chrome 58 renvoie des promesses résolues dans ce cas.
Promise.all([1,2,3]).then(res=>{ console.log(res)//[1,2,3] })
Cette promesse renvoyée sera résolue/rejetée de manière asynchrone lorsque toutes les promesses de l'itérable donné auront été résolues, ou lorsqu'une promesse aura été rejetée (lorsque la pile est vide)
1. Lorsque toutes les promesses de l'objet itérable donné ont été résolues
let promise1 = new Promise((resolve,reject)=>{ resolve(1) }) let promise2 = new Promise((resolve,reject)=>{ resolve(2) }) Promise.all([promise1,promise2,3]).then(res=>{ console.log(res)//[1,2,3] })
2. Lorsque toutes les promesses de l'objet itérable donné ont été résolues Lorsqu'une promesse est rejeté
let promise1 = new Promise((resolve,reject)=>{ resolve(1) }) let promise2 = new Promise((resolve,reject)=>{ reject(2) }) Promise.all([promise1,promise2,3]).then(res=>{ console.log(res) }).catch(err=>{ console.log(err)//2 })
Description :
Cette méthode est utile pour agréger les résultats de plusieurs promesses. Dans ES6, plusieurs requêtes asynchrones Promise.all peuvent être exécutées en parallèle :
. 1. Lorsque tous les résultats sont renvoyés avec succès, le succès est renvoyé dans l'ordre de la demande ;
2 Lorsqu'il y a une méthode d'échec, entrez la méthode d'échec
Scénario d'application 1 : Les résultats de plusieurs requêtes sont fusionnés
Description détaillée : une page contient plusieurs requêtes. Nous avons besoin que toutes les requêtes renvoient des données avant de traiter le rendu ensemble
Réflexion : S'il y a des demandes simultanées, l'état de chargement de chaque demande doit être défini séparément. S'il y a plusieurs chargements, plusieurs chargements peuvent se chevaucher. Le contenu affiché sur la page variera en fonction de la vitesse de retour des données en fonction de la demande. spécifiquement reflété dans le processus de rendu. Afin d'améliorer l'expérience utilisateur, nous pouvons utiliser toutes les requêtes pour renvoyer des données, puis les restituer ensemble. À ce stade, nous désactivons le paramètre de chargement séparé de la requête et résumons les résultats de la requête via Promise. .all Du début à la fin, nous n’avons défini qu’un seul chargement.
//1.获取轮播数据列表 function getBannerList(){ return new Promise((resolve,reject)=>{ setTimeout(function(){ resolve('轮播数据') },300) }) } //2.获取店铺列表 function getStoreList(){ return new Promise((resolve,reject)=>{ setTimeout(function(){ resolve('店铺数据') },500) }) } //3.获取分类列表 function getCategoryList(){ return new Promise((resolve,reject)=>{ setTimeout(function(){ resolve('分类数据') },700) }) } function initLoad(){ // loading.show() //加载loading Promise.all([getBannerList(),getStoreList(),getCategoryList()]).then(res=>{ console.log(res) // loading.hide() //关闭loading }).catch(err=>{ console.log(err) // loading.hide()//关闭loading }) } //数据初始化 initLoad()
Scénario d'application 2 : Fusionner les résultats de la demande et gérer les erreurs
Description : Nous devons gérer la logique de rendu des données et de gestion des erreurs d'un demande séparément, s'il y a plusieurs demandes, nous devons écrire
à plusieurs endroits. En pensant : pouvons-nous fusionner plusieurs demandes ensemble ? Même si certaines demandes échouent, elles nous seront renvoyées uniquement. Gérez simplement les données et la logique des erreurs en un seul endroit.
//1.获取轮播图数据列表 function getBannerList(){ return new Promise((resolve,reject)=>{ setTimeout(function(){ // resolve('轮播图数据') reject('获取轮播图数据失败啦') },300) }) } //2.获取店铺列表 function getStoreList(){ return new Promise((resolve,reject)=>{ setTimeout(function(){ resolve('店铺数据') },500) }) } //3.获取分类列表 function getCategoryList(){ return new Promise((resolve,reject)=>{ setTimeout(function(){ resolve('分类数据') },700) }) } function initLoad(){ // loading.show() Promise.all([ getBannerList().catch(err=>err), getStoreList().catch(err=>err), getCategoryList().catch(err=>err) ]).then(res=>{ console.log(res) // ["获取轮播图数据失败啦", "店铺数据", "分类数据"] if(res[0] == '轮播图数据'){ //渲染 }else{ //获取 轮播图数据 失败的逻辑 } if(res[1] == '店铺数据'){ //渲染 }else{ //获取 店铺列表数据 失败的逻辑 } if(res[2] == '分类数据'){ //渲染 }else{ //获取 分类列表数据 失败的逻辑 } // loading.hide() }) } initLoad()
Parfois, la page raccroche, peut-être à cause d'une exception d'interface, ou peut-être que c'est juste une interface insignifiante qui raccroche. Alors pourquoi une interface raccroche-t-elle, ce qui entraîne l'absence de données sur toute la page ? Promise.all nous dit que si une promesse dans le paramètre échoue (rejetée) et que le rappel de cette instance échoue (rejet), le rappel de la méthode then ne sera plus exécuté. Le cas d'utilisation ci-dessus peut résoudre ce problème
<🎜. >
Scénario d'application 3 : Vérifier si les résultats de plusieurs requêtes remplissent les conditions
Description : Dans un projet d'applet WeChat, effectuer une vérification de sécurité du contenu d'entrée d'un formulaire, appelé C'est une méthode écrite par les fonctions cloud. Il y a 7 champs dans le formulaire qui doivent être vérifiés. Ils sont tous appelés par une interface de vérification de la sécurité du contenu. Si toutes les vérifications sont réussies, la soumission normale peut être effectuéePromise .race<. 🎜>
function verify1(content){ return new Promise((resolve,reject)=>{ setTimeout(function(){ resolve(true) },200) }) } function verify2(content){ return new Promise((resolve,reject)=>{ setTimeout(function(){ resolve(true) },700) }) } function verify3(content){ return new Promise((resolve,reject)=>{ setTimeout(function(){ resolve(true) },300) }) } Promise.all([verify1('校验字段1的内容'),verify2('校验字段2的内容'),verify3('校验字段3的内容')]).then(result=>{ console.log(result)//[true, true, true] let verifyResult = result.every(item=>item) //验证结果 console.log(verifyResult?'通过验证':'未通过验证')// 通过验证 }).catch(err=>{ console.log(err) })Copier après la connexion
Syntaxe : Promise.race(iterable)
Paramètres
: objet itérable itérable, tel que Array . Itérable.
Valeur de retour: La méthode Promise.race(iterable) renvoie une promesse une fois qu'une promesse dans l'itérateur est résolue ou rejetée, la promesse renvoyée sera résolue ou rejetée
DescriptionLa fonction race renvoie une Promesse qui sera remplie de la même manière que la première promesse passée. Il peut soit être résolu (résoudre), soit échouer (rejeter), selon celui des deux terminé en premier. Si l'itération passée est vide, la promesse renvoyée attendra éternellement.
Si l'itération contient une ou plusieurs valeurs non promises et/ou des promesses résolues/rejetées, Promise.race se résoudra à la première valeur trouvée dans l'itération.
Scénario d'application 1 : Délai d'expiration de la demande d'image//请求某个图片资源
function requestImg(){
var p = new Promise(function(resolve, reject){
var img = new Image();
img.onload = function(){
resolve(img);
}
//img.src = "https://b-gold-cdn.xitu.io/v3/static/img/logo.a7995ad.svg"; 正确的
img.src = "https://b-gold-cdn.xitu.io/v3/static/img/logo.a7995ad.svg1";
});
return p;
}
//延时函数,用于给请求计时
function timeout(){
var p = new Promise(function(resolve, reject){
setTimeout(function(){
reject('图片请求超时');
}, 5000);
});
return p;
}
Promise
.race([requestImg(), timeout()])
.then(function(results){
console.log(results);
})
.catch(function(reason){
console.log(reason);
});
Description : Parfois, nous lisons les informations une seconde, et après être entré dans l'ascenseur la seconde suivante, il vous sera demandé sur la page du téléphone portable que "le réseau n'est pas bon"
Promesse .prototype.then//请求 function request(){ return new Promise(function(resolve, reject){ setTimeout(()=>{ resolve('请求成功') },4000) }) } //请求超时提醒 function timeout(){ var p = new Promise(function(resolve, reject){ setTimeout(function(){ reject('网络不佳'); }, 3000); }); return p; } Promise.race([ request(), timeout() ]) .then(res=>{ console.log(res) }).catch(err=>{ console.log(err)//网络不佳 })Copier après la connexion
Scénario d'application 1 : La requête suivante dépend du résultat de la requête précédente
描述:类似微信小程序的登录,首先需要 执行微信小程序的 登录 wx.login 返回了code,然后调用后端写的登录接口,传入 code ,然后返回 token ,然后每次的请求都必须携带 token,即下一次的请求依赖上一次请求返回的数据 应用场景2:中间件功能使用 描述:接口返回的数据量比较大,在一个then 里面处理 显得臃肿,多个渲染数据分别给个then,让其各司其职 推荐教程:《JS教程》 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!function A(){
return new Promise((resolve,reject)=>{
setTimeout(()=>{
resolve('B依赖的数据')
},300)
})
}
function B(prams){
return new Promise((resolve,reject)=>{
setTimeout(()=>{
resolve(prams + 'C依赖的数据')
},500)
})
}
function C(prams){
return new Promise((resolve,reject)=>{
setTimeout(()=>{
resolve(prams)
},1000)
})
}
//我们期望的是走 try ,由于A B C模拟的请求中都是没有reject,用 try catch 捕获错误
try{
A().then( res=>B(res) ).then( res=>C(res) ).then( res=>{
console.log(res)//B依赖的数据C依赖的数据
})
} catch(e){
}
//模拟后端返回的数据
let result = {
bannerList:[
{img:'轮播图地址'}
//...
],
storeList:[
{name:'店铺列表'}
//...
],
categoryList:[
{name:'分类列表'}
//...
],
//...
}
function getInfo(){
return new Promise((resolve,reject)=>{
setTimeout(()=>{
resolve(result)
},500)
})
}
getInfo().then(res=>{
let { bannerList } = res
//渲染轮播图
console.log(bannerList)
return res
}).then(res=>{
let { storeList } = res
//渲染店铺列表
console.log(storeList)
return res
}).then(res=>{
let { categoryList } = res
console.log(categoryList)
//渲染分类列表
return res
})

Outils d'IA chauds

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

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

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

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

Sujets chauds





Dans la vie quotidienne, nous rencontrons souvent des problèmes entre promesses et réalisation. Que ce soit dans une relation personnelle ou dans une transaction commerciale, tenir ses promesses est essentiel pour instaurer la confiance. Cependant, les avantages et les inconvénients de l’engagement sont souvent controversés. Cet article explorera les avantages et les inconvénients des engagements et donnera quelques conseils sur la façon de tenir parole. Les avantages promis sont évidents. Premièrement, l’engagement renforce la confiance. Lorsqu’une personne tient parole, elle fait croire aux autres qu’elle est une personne digne de confiance. La confiance est le lien établi entre les personnes, qui peut les rendre plus

Vue est un framework frontal populaire et vous rencontrez souvent diverses erreurs et problèmes lors du développement d'applications. Parmi eux, Uncaught(inpromise)TypeError est un type d’erreur courant. Dans cet article, nous discuterons de ses causes et de ses solutions. Qu'est-ce qu'une erreur de type non interceptée (inpromise) ? L'erreur Uncaught(inpromise)TypeError apparaît généralement dans

Une explication détaillée de Promise.resolve() nécessite des exemples de code spécifiques. Promise est un mécanisme en JavaScript pour gérer les opérations asynchrones. Dans le développement réel, il est souvent nécessaire de traiter certaines tâches asynchrones qui doivent être exécutées dans l'ordre, et la méthode Promise.resolve() est utilisée pour renvoyer un objet Promise qui a été rempli. Promise.resolve() est une méthode statique de la classe Promise, qui accepte un

Utilisez les objets Promise pour modifier les fonctions ordinaires afin de renvoyer Promise afin de résoudre le problème de l'enfer des rappels. Comprendre la logique d'appel du succès et de l'échec de Promise et pouvoir l'ajuster de manière flexible. Comprenez les connaissances de base, utilisez-les en premier, puis intégrez et absorbez lentement les connaissances.

Compatibilité des navigateurs : quels navigateurs prennent en charge Promises ? Alors que la complexité des applications Web continue d'augmenter, les développeurs sont impatients de résoudre le problème de la programmation asynchrone en JavaScript. Dans le passé, les développeurs utilisaient souvent des fonctions de rappel pour gérer les opérations asynchrones, mais cela aboutissait à un code complexe et difficile à maintenir. Pour résoudre ce problème, ECMAScript6 a introduit Promise, qui offre un moyen plus intuitif et flexible de gérer les opérations asynchrones. La promesse est une méthode utilisée pour gérer les exceptions

Les états de l'objet promis sont : 1. en attente : état initial, ni état de réussite ni d'échec ; 2. accompli : signifie que l'opération a été terminée avec succès 3. rejeté : signifie que l'opération a échoué ; Une fois qu'un objet Promise est terminé, il passe de l'état en attente à l'état réalisé ou rejeté, et ne peut plus changer. Les objets Promise sont largement utilisés en JavaScript pour gérer les opérations asynchrones telles que les requêtes AJAX et les opérations chronométrées.

Avantages : asynchrone et non bloquant, ne bloque pas le thread principal ; améliore la lisibilité et la maintenabilité du code ;

La promesse est un modèle de programmation pour gérer les opérations asynchrones. C'est un objet qui représente l'achèvement ou l'échec final d'une opération asynchrone. Il peut être considéré comme un engagement envers les opérations asynchrones. Il peut mieux gérer et organiser le code asynchrone. plus lisible et maintenable. Les objets de promesse ont trois états : en attente, rempli et rejeté. L'idée principale de Promise est de séparer les opérations asynchrones des fonctions de rappel et d'exprimer les dépendances entre les opérations asynchrones via des appels en chaîne.
