Maison > interface Web > js tutoriel > le corps du texte

Utilisation de Promise dans JS pour implémenter un exemple de code de feux de circulation (démo)

韦小宝
Libérer: 2018-01-11 10:16:27
original
2578 Les gens l'ont consulté

Cet article vous présente l'utilisation de Promise en JS pour obtenir des effets de feux de signalisation grâce à un exemple de code. Il présente également un exemple d'utilisation de Promesse. Les amis qui ne savent pas comment utiliser Promise en JS peuvent se référer à cet article

Exigences

  • Utilisez la promesse de sauter la couleur du feu de circulation

  • Le le feu vert est exécuté pendant trois secondes Après

  • Après que le feu jaune soit exécuté pendant quatre secondes

  • Le feu rouge est exécuté pendant cinq secondes

Implémentation HTML Comme suit :

<ul id="traffic" class="">
 <li id="green"></li>
 <li id="yellow"></li>
 <li id="red"></li>
</ul>
Copier après la connexion
Définissez une classe vide, puis utilisez le nom de classe correspondant dans js pour obtenir les effets associés.

CSS est implémenté comme suit :

ul {
 position: absolute;
 width: 200px;
 height: 200px;
 top: 50%;
 left: 50%;
 transform: translate(-50%,-50%);
}
 /*画3个圆代表红绿灯*/
 ul >li {
  width: 40px;
  height: 40px;
  border-radius:50%;
  opacity: 0.2;
  display: inline-block;
 }
 /*执行时改变透明度*/
 ul.red >#red, 
 ul.green >#green,
 ul.yellow >#yellow{
  opacity: 1.0;
 }
 /*红绿灯的三个颜色*/
 #red {background: red;}
 #yellow {background: yellow;}
 #green {background: green;}
Copier après la connexion

javascriptPrincipe :

La fonction de promesse est une fonction d'opération asynchrone . Dans la fonction La méthode then() peut être utilisée à la fin de l'exécution. Nous pouvons y parvenir en définissant une exécution différée dans la fonction de promesse.

le code js est le suivant :

function timeout(timer){
  return function(){ 
   return new Promise(function(resolve,reject){
   setTimeout(resolve,timer) 
   })  
  }
  }
 var green = timeout(3000);
 var yellow = timeout(4000);
 var red = timeout(5000);
 var traffic = document.getElementById("traffic");
 (function restart(){
  &#39;use strict&#39;      //严格模式
  console.log("绿灯"+new Date().getSeconds()) //绿灯执行三秒 
  traffic.className = &#39;green&#39;;
  green()
  .then(function(){
   console.log("黄灯"+new Date().getSeconds()) //黄灯执行四秒
   traffic.className = &#39;yellow&#39;;
   return yellow();
  })
  .then(function(){
   console.log("红灯"+new Date().getSeconds()) //红灯执行五秒
   traffic.className = &#39;red&#39;;
   return red();
  }).then(function(){
   restart()
  })
  })();
Copier après la connexion

ps : Jetons un coup d'œil à un exemple d'utilisation de Promise

Remarque : si vous le souhaitez, les méthodes peuvent être exécutées dans une chaîne et doivent renvoyer un objet Promise ! ! !


&#39;use strict&#39;; 
 
function async(value) { 
  return new Promise(function(resolve, reject) { 
    var ms = Math.round(Math.random() * 1000); 
    setTimeout(function() { 
      console.log(&#39;waiting &#39; + ms + &#39;ms&#39;); 
      // 等待ms毫秒 
      resolve(value + ms); 
    }, ms); 
  }); 
} 
// 每次执行随机等待n毫秒,结果统计总毫秒数 
async(0) 
.then(async) 
.then(async) 
.then(async) 
.then(async) 
.then(function(value) { 
  console.log(&#39;------total wait:&#39; + value + &#39;ms&#39;); 
}); 
//////////////////////////////////////////////////////////// 
function async1(value) { 
  return new Promise(function(resolve, reject) { 
    resolve(value + 1); 
  }); 
} 
function async2(value) { 
  // return new Promise(function(resolve, reject) { 
  //   resolve(value + 2); 
  // }); 
  // 等价与上面写法 
  return Promise.resolve(value + 2); 
} 
function async3(value) { 
  return new Promise(function(resolve, reject) { 
    resolve(value + 3); 
  }); 
} 
async1(100).then(async2).then(async3).then(function(value) { 
  console.log(&#39;------&#39; + value); 
}); 
///////////////////////////////////////////////////////////////// 
function say() { 
  var value = &#39;what&#39;; 
  return Promise.resolve(value); 
} 
say().then(function(value) { 
  value = value + &#39; are&#39;; 
  return Promise.resolve(value); 
}).then(function(value) { 
  value = value + &#39; you&#39;; 
  return Promise.resolve(value); 
}).then(function(value) { 
  value = value + &#39; doing&#39;; 
  return Promise.resolve(value); 
  //return Promise.reject(&#39;error, exit&#39;); // 中途退出 
}).then(function(value) { 
  value = value + &#39; now!&#39;; 
  return Promise.resolve(value); 
}).then(function(value) { 
  console.log(&#39;------&#39; + value); 
}).catch(function(error) { 
  console.log(&#39;------&#39; + error); 
}); 
<html> 
<head> 
  <title>Ball move</title> 
  <style type="text/css"> 
    .ball { 
      width: 40px; 
      height: 40px; 
      border-radius: 20px; 
      margin-left: 10px; 
    } 
    .ball1 { 
      background: #ff0000; 
    } 
    .ball2 { 
      background: #00ff00; 
    } 
    .ball3 { 
      background: #0000ff; 
    } 
  </style> 
  <script src="http://libs.baidu.com/jquery/1.9.0/jquery.js"></script> 
</head> 
<body> 
  <p class="ball ball1"></p> 
  <p class="ball ball2"></p> 
  <p class="ball ball3"></p> 
  <script type="text/javascript"> 
    function moving(ball, pos) { 
      return new Promise(function(resolve, reject) { 
        var marginLeft = parseInt(ball.css(&#39;margin-left&#39;)); 
        if (marginLeft != pos) { 
          var timerId = setInterval(function() { 
            marginLeft = marginLeft + 1; 
            ball.css(&#39;margin-left&#39;, marginLeft); 
            if (marginLeft == pos) { 
              clearInterval(timerId); 
              resolve(); 
            } 
          }, 20); 
        } else { 
          resolve(); 
        } 
      }); 
    } 
    moving($(&#39;.ball1&#39;), 100).then(function() { 
      return moving($(&#39;.ball2&#39;), 150); 
    }).then(function() { 
      return moving($(&#39;.ball3&#39;), 200); 
    }); 
  </script> 
</body> 
</html>
Copier après la connexion
Ce qui précède est l'exemple de code (démo) d'utilisation de Promise en JS pour implémenter les feux de circulation présenté par l'éditeur. J'espère que cela sera utile à tout le monde ! !

Recommandations associées :

Manières spécifiques d'utiliser la promesse de jQuery

Comment mettre en œuvre une promesse complète

À propos de l'utilisation simple des objets de promesse

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!

Étiquettes associées:
source:php.cn
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal