Dieser Artikel führt Sie in die Verwendung von Promise in JS ein, um Ampeleffekte durch Beispielcode zu erzielen. Außerdem wird ein Beispiel für die Verwendung von Promise in JS vorgestellt.
Anforderungen
Versprechen Sie, die Ampelfarbe zu überspringen
Die Grünes Licht wird drei Sekunden lang ausgeführt. Nach
Nachdem das gelbe Licht vier Sekunden lang ausgeführt wird
Das rote Licht wird fünf Sekunden lang ausgeführt
HTML-Implementierung Wie folgt:
<ul id="traffic" class=""> <li id="green"></li> <li id="yellow"></li> <li id="red"></li> </ul>
Definieren Sie eine leere Klasse und bedienen Sie dann den entsprechenden Klassennamen in js, um verwandte Effekte zu erzielen.
CSS wird wie folgt implementiert:
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;}
JavascriptPrinzip:
Die Promise-Funktion ist eine asynchrone Betriebsfunktion . In der Funktion kann am Ende des Laufs die Methode then() verwendet werden. Wir können dies erreichen, indem wir eine verzögerte Ausführung innerhalb der Promise-Funktion festlegen.
js-Code lautet wie folgt:
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(){ 'use strict' //严格模式 console.log("绿灯"+new Date().getSeconds()) //绿灯执行三秒 traffic.className = 'green'; green() .then(function(){ console.log("黄灯"+new Date().getSeconds()) //黄灯执行四秒 traffic.className = 'yellow'; return yellow(); }) .then(function(){ console.log("红灯"+new Date().getSeconds()) //红灯执行五秒 traffic.className = 'red'; return red(); }).then(function(){ restart() }) })();
ps: Schauen wir uns ein Beispiel für die Verwendung von Promise an
Hinweis: Wenn Sie möchten, können Methoden in einer Kette ausgeführt werden und müssen ein Promise-Objekt zurückgeben! ! !
'use strict'; function async(value) { return new Promise(function(resolve, reject) { var ms = Math.round(Math.random() * 1000); setTimeout(function() { console.log('waiting ' + ms + 'ms'); // 等待ms毫秒 resolve(value + ms); }, ms); }); } // 每次执行随机等待n毫秒,结果统计总毫秒数 async(0) .then(async) .then(async) .then(async) .then(async) .then(function(value) { console.log('------total wait:' + value + 'ms'); }); //////////////////////////////////////////////////////////// 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('------' + value); }); ///////////////////////////////////////////////////////////////// function say() { var value = 'what'; return Promise.resolve(value); } say().then(function(value) { value = value + ' are'; return Promise.resolve(value); }).then(function(value) { value = value + ' you'; return Promise.resolve(value); }).then(function(value) { value = value + ' doing'; return Promise.resolve(value); //return Promise.reject('error, exit'); // 中途退出 }).then(function(value) { value = value + ' now!'; return Promise.resolve(value); }).then(function(value) { console.log('------' + value); }).catch(function(error) { console.log('------' + 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('margin-left')); if (marginLeft != pos) { var timerId = setInterval(function() { marginLeft = marginLeft + 1; ball.css('margin-left', marginLeft); if (marginLeft == pos) { clearInterval(timerId); resolve(); } }, 20); } else { resolve(); } }); } moving($('.ball1'), 100).then(function() { return moving($('.ball2'), 150); }).then(function() { return moving($('.ball3'), 200); }); </script> </body> </html>
Das Obige ist der vom Herausgeber eingeführte Beispielcode (Demo) für die Verwendung von Promise in JS. Ich hoffe, er wird für alle hilfreich sein! !
Verwandte Empfehlungen:
Spezifische Möglichkeiten zur Verwendung von jQuerys Promise
Wie Sie ein vollständiges Promise implementieren
Über die einfache Verwendung von Promise-Objekten
Das obige ist der detaillierte Inhalt vonPromise in JS verwenden, um Ampel-Beispielcode zu implementieren (Demo). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!