Promiseの使用


Promiseとは何か、どのアプリケーションシーンか
承諾は、非同期プログラミングの解決策である.Promiseとは、それ自体が容器であり、非同期操作の結果が保存されており、3つの状態があります.
  • pending(進行中)
  • resolved(成功)
  • rejected(失敗
  • Promise.all()/実装すべてのピクチャがロードされたときに、ページに表示される
  • Promise.race()/実装先ロード完了者
  • 容器結果:を取得する.then()/約束を果たすコールバック|.catch()/承諾を拒否したコールバック
  • 
    
    	
    		
    		
    	
    	
    	<p><button id="btn">  </button></p>
    	<div id="box1">
    		
    	</div>
    	<div id="box2">
    		<p>race            </p>
    	</div>
    	<div id="box3">
    		<p>            ,       </p>
    	</div>
    	<script>
    		var pics = [
    			"https://cdn.cnbj1.fds.api.mi-img.com/mi-mall/7bc54a61b927dd8c54ddd39a0acf0254.jpg?w=632&h=340",
    			"https://cdn.cnbj1.fds.api.mi-img.com/mi-mall/94c74e01afe50a86c3a87ff030b85781.jpg?w=632&h=340",
    			"https://cdn.cnbj1.fds.api.mi-img.com/mi-mall/816a66edef10673b4768128b41804cae.jpg?w=632&h=340"
    		]
    		
    		function loadImg(url){
    			return new Promise((resolve,reject)=>{
    				var img = document.createElement("img");
    				img.src = url;
    				img.style.width = "200px";
    				img.onload = function(){resolve(img)};
    				img.onerror = function(){reject(img)};
    			})
    		}
    		
    		//    
    		btn.onclick = function(){
    			loadImg(pics[0])
    			.then(res=>{
    				box1.appendChild(res);
    				return loadImg(pics[1]);
    			})
    			.then(res=>{
    				box1.appendChild(res);
    				return loadImg(pics[2]);
    			})
    			.then(res=>{
    				box1.appendChild(res);
    			})
    		}
    		//race  
    		Promise.race([loadImg(pics[0]),loadImg(pics[1]),loadImg(pics[2])])
    		.then(res=>{
    			box2.appendChild(res);
    		})
    		//all  
    		Promise.all([loadImg(pics[0]),loadImg(pics[1]),loadImg(pics[2])])
    		.then(res=>{
    			for(img in res){
    				box3.appendChild(res[img]);
    			}
    			
    		})
    	</script>
    	
    
    
    </code></pre> 
     </div> 
    </div>
                                </div>
                            </div>