zoukankan      html  css  js  c++  java
  • Promise

    所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。从语法上说,Promise是一个对象,从它可以获取异步操作的消息。Promise提供统一的API,各种异步操作都可以用同样的方法进行处理。

    1.ES5回调实现异步

     1 {
     2     let ajax = function(callback){
     3         console.log("执行了")
     4         setTimeout(function(){
     5             callback&&callback.call() ;  //判断callback为真时执行
     6         },1000);
     7     };
     8     ajax(function(){
     9         console.log("setTimeout1")
    10     })
    11 }

    2.Promise实现异步

     1 {
     2     let ajax = function(){   //不需要参数
     3         console.log("执行2");
     4         return new Promise(function(resolve,reject){  //返回Promise对象,具有then方法,resolve要执行下一步的操作,reject表示要终端操作
     5             setTimeout(function(){
     6                 resolve();
     7             },1000)
     8         })
     9     };
    10     ajax().then(function(){      //then的第一个函数体代表resolve,第二个函数体代表reject
    11         console.log("promise"); 
    12     })
    13 }

    3.很多异步操作

     1 {
     2     // 不断的下一步下一步 异步
     3     let ajax = function(){
     4         console.log('执行3');
     5         return new Promise(function(resolve,reject){
     6             setTimeout(function(){
     7                 resolve()
     8             },1000)
     9         })
    10     };
    11     ajax().then(function(){
    12         return new Promise(function(resolve,reject){
    13             setTimeout(function(){
    14                 resolve()
    15             },1000)
    16         })
    17     })
    18     .then(function(){
    19         console.log("setTimeout3")
    20     })
    21 }

    4.捕捉异常catch

     1 {
     2     let ajax = function(num){
     3         return new Promise(function(resolve,reject){
     4             if(num >5){
     5                 resolve()
     6             }else{
     7                 throw new Error("值小于5了")
     8             }
     9         })
    10     };
    11     ajax(6).then(function(){
    12         console.log("log",6)
    13     }).catch(function(err){
    14         console.log('err',err)
    15     })
    16 
    17     ajax(3).then(function(){
    18         console.log("log",3)
    19     }).catch(function(err){
    20         console.log("err",err)
    21     })
    22 }

    5.Promise.all

     1 {
     2     // 所有图片加载完在添加到页面
     3     function loadImg(src){
     4         return new Promise((resolve,reject)=>{
     5             let img = document.createElement("img");
     6             img.src=src;
     7             img.onload=function(){
     8                 resolve(img);
     9             }
    10             img.onerror=function(err){
    11                 reject(err);
    12             }
    13         })
    14     }
    15 
    16     function showImgs(imgs){
    17         imgs.forEach(img=>{
    18             document.body.appendChild(img);
    19         })
    20     }
    21     Promise.all([    //all把多个Promise实例当做一个Promise实例
    22         loadImg('https://oimagec4.ydstatic.com/image?id=-5397300958976572132&product=adpublish&w=520&h=347'),
    23         loadImg('https://oimagec4.ydstatic.com/image?id=-5397300958976572132&product=adpublish&w=520&h=347'),
    24         loadImg('https://oimagec4.ydstatic.com/image?id=-5397300958976572132&product=adpublish&w=520&h=347')
    25         ])
    26     .then(showImgs)   //当所有图片都加载完成后才触发新的Promise实例
    27 }

    6.Promise.race

     1 {
     2     //有一个图片加载完成就添加到页面上,其他的不管
     3     function loadImg(src){
     4         return new Promise((resolve,reject)=>{
     5             let img = document.createElement("img");
     6             img.src=src;
     7             img.onload=function(){
     8                 resolve(img);
     9             }
    10             img.onerror=function(err){
    11                 reject(err);
    12             }
    13         })
    14     }
    15     function showImg(img){
    16         let p = document.createElement('p');
    17         p.appendChild(img);
    18         document.body.appendChild(p);
    19     }
    20     Promise.race([    //只加载一个
    21         loadImg('https://oimagec4.ydstatic.com/image?id=-5397300958976572132&product=adpublish&w=520&h=347'),
    22         loadImg('https://oimagec4.ydstatic.com/image?id=-5397300958976572132&product=adpublish&w=520&h=347'),
    23         loadImg('https://oimagec4.ydstatic.com/image?id=-5397300958976572132&product=adpublish&w=520&h=347')
    24         ])
    25     .then(showImg) 
    26 }
  • 相关阅读:
    Metronic最优秀的基于Bootstrap的响应式网站模版
    SMINT:单页网站的免費jQuery插件
    不做全栈开发工程师
    《劲道》课程笔记——教练对话
    windows 7环境下配置oracle 11g 客户端
    jsp+servlet+javabean (MVC)分页
    解析java中 hashcode()
    BeanUtils操作
    Dom4jApp.java 解析和创建XML
    dom4j
  • 原文地址:https://www.cnblogs.com/zynkl1314/p/12066267.html
Copyright © 2011-2022 走看看