美文网首页
(二)18.Promise19-08-15

(二)18.Promise19-08-15

作者: 你坤儿姐 | 来源:发表于2019-08-15 16:50 被阅读0次
{
  //基本定义
  let ajax=function(callback){
    console.log('执行');
    setTimeout(function () {
      callback&&callback.call()
    },1000);
  };
  ajax(function () {
    console.log('timeout1');
  })
}

打印结果:
执行
timeout1

{
  //和上面同一个案例 用promise写法   promise写法好处 可读性可维护性比较好
  let ajax=function () {
    console.log('执行2');
    //返回一个Promise实例
    return new Promise(function (resolve,reject) {
      //resolve要执行下一步的操作  reject终止当前操作
      setTimeout(function () {
        resolve()

      },1000);

    })
  };
  //ajax返回promise实例,这个实例要用.then执行下一步,then的参数体就是下一步,
  // 第一个function对应的resolve 第二个function对应的reject,不需要可以不写
  ajax().then(function () {
    console.log('promise','timeout2');
  },function (){})
}

打印结果:
执行2
promise timeout2

  • Promise多步调用
{
  //Promise多步调用
  let ajax=function () {
    console.log('执行3');
    //返回一个Promise实例
    return new Promise(function (resolve,reject) {
      //resolve要执行下一步的操作  reject终止当前操作
      setTimeout(function () {
        resolve()

      },1000);

    })
  };

  ajax()
    .then(function () {
    return new Promise(function (resolve, reject) {
      setTimeout(function () {
        resolve()
      },2000);
    })
      .then(function () {
      console.log('timeout3');
    })
  })

}

打印结果:
执行3
timeout3

  • Promise 捕获异常错误
{
  //捕获异常错误
  let ajax=function (num) {
    console.log('执行4');
    return new Promise(function (resolve, reject) {
      if (num>5){
        resolve()
      }else{
        throw new Error('出错了')
      }
    })
  }
   ajax(3).then(function () {
     console.log('log',3);
   }).catch(function (err) {
     console.log('catch',err);
   })
}

打印结果:
执行4
catch Error: 出错了
at new Promise (<anonymous>)
at index.min.js:1
at Object.<anonymous> (index.min.js:1)
at r (index.min.js:1)
at Object.<anonymous> (index.min.js:1)
at r (index.min.js:1)
at Object.<anonymous> (index.min.js:1)
at r (index.min.js:1)
at index.min.js:1

  • 所有图片加载成功后 再加载到页面
{
  //所有图都加载成功后 再加载到页面
  function loadImg(src) {
    return new Promise((resolve,reject)=>{
      let img=document.createElement('img');
      img.src=src;
      img.onload=function () {
        resolve(img);
      }
      img.onerror=function (err) {
        reject(err);
      }
    })
  }

  function showImgs(imgs) {
    imgs.forEach(function (img) {
      document.body.appendChild(img);
    })
  }

  Promise.all([
    loadImg('http://wx4.sinaimg.cn/orj360/95c2d66dgy1g5zap2hq5rj20j60j6gnj.jpg'),
    loadImg('http://wx4.sinaimg.cn/orj360/95c2d66dgy1g5zap2lko3j20j60j6myx.jpg'),
    loadImg('http://wx3.sinaimg.cn/orj360/95c2d66dgy1g5zap2if2rj20j60j6dhi.jpg')
  ]).then(showImgs)
}
  • 一个图片加载完成就加载在页面上 其他终止
{
  //一个图都加载成功后 就加载到页面
  function loadImg(src) {
    return new Promise((resolve,reject)=>{
      let img=document.createElement('img');
      img.src=src;
      img.onload=function () {
        resolve(img);
      }
      img.onerror=function (err) {
        reject(err);
      }
    })
  }

  function showImgs(img) {
    let p=document.createElement('p');
    p.appendChild(img);
    document.body.appendChild(p)
  }

  Promise.race([
    loadImg('http://wx4.sinaimg.cn/orj360/95c2d66dgy1g5zap2hq5rj20j60j6gnj.jpg'),
    loadImg('http://wx4.sinaimg.cn/orj360/95c2d66dgy1g5zap2lko3j20j60j6myx.jpg'),
    loadImg('http://wx3.sinaimg.cn/orj360/95c2d66dgy1g5zap2if2rj20j60j6dhi.jpg')
  ]).then(showImgs)
}

相关文章

  • (二)18.Promise19-08-15

    打印结果:执行timeout1 打印结果:执行2promise timeout2 Promise多步调用 打印结果...

  • 二(二)

    发什么神经 突然就很想花钱 一边心疼 一边毫不在乎的花 啧 莫名其妙

  • 二,二

    2017.9.11教师节后的周一,第一次走进教室,刚站到讲台两个小可爱送给我两束花,原谅我那时候人还没有认全没有记...

  • 二〇二〇

    本来这篇小结打算年初写的,但是想想后边还有复试就先放一放,结果复试结束后过了两个月才想起要写这篇小结... 时过境...

  • 二金二木二火二土

    今天看完了极简中国史,这本书看了半个多月,因为是八十年前写的书,不是白话文,所以看的特别累。不过从近代前辈的角度去...

  • 说二『似二非二的二』

    说实话原以为他最多似二,生活小节或许专门学着似二,中枢神经应该不至于非二,没想到最近越来越疯狂地绞尽脑汁地朝着二的...

  • 二胎(二)

    今天宝宝三十周了,还有十周你就要出来了,也许会提前,妈妈和家人都很期待。 到了孕晚期,睡觉是个问题,左睡右睡都不对...

  • 二小姐(二)

    我去了李家,那环境好,夫人老爷小姐都很和蔼,我正坐在由木头和瓷做的椅子上,正等待着女管家来接我,我人生地不熟...

  • 二、递归(二)

    一、棋盘分割问题 【每次切完一个棋盘,就是需要舍弃掉一面,只能在一面操作】

  • 二选二

    既然已经分手了,那就应该正视我们的故事。待成熟睿智的甘露填补满年少轻狂的洼壑,你再回过头来,促膝把酒花前月下也能...

网友评论

      本文标题:(二)18.Promise19-08-15

      本文链接:https://www.haomeiwen.com/subject/sjhzjctx.html