• 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 }
  • 相关阅读:
    从jQuery看JavaScript匿名函数与闭包
    向properties文件中写入信息(针对获取properties文件失败的总结)
    windows系统下的redis启动教程
    第零次作业
    C语言博客作业02循环结构
    c语言博客作业03函数
    第一次作业
    笔记
    整型类型
    鸡和兔
  • 原文地址:https://www.cnblogs.com/zynkl1314/p/12066267.html
Copyright © 2020-2023  润新知