zoukankan      html  css  js  c++  java
  • ES6中promise的使用方法

     先看看ES5中异步编程的使用。

    1 let ajax = function (callBlack) {
    2   setTimeout(function () {
    3     callBlack && callBlack()
    4   }, 1000);
    5 }
    6 ajax(function () {
    7   console.log(1)
    8 });

     在ES6中使用Promise来解决异步编程。

     1 let ajax = function () {
     2   return new Promise(function (reslove, reject) {
     3     setTimeout(function () {
     4       reslove()
     5     }, 1000);
     6   })
     7 }
     8 ajax().then(function () {
     9   console.log(1);
    10 })

     有多个步骤,让异步编程更加简单。

     1 let ajax = function () {
     2   return new Promise(function (reslove, reject) {
     3     setTimeout(function () {
     4       reslove()
     5     }, 1000);
     6   })
     7 }
     8 ajax().then(function () {
     9   console.log(1);
    10   return new Promise(function (reslove, reject) {
    11     setTimeout(function () {
    12       reslove()
    13     }, 2000);
    14   })
    15 }).then(function () {
    16   console.log(2)
    17 });

     在Promise中可以使用catch来捕获异常。

     1 let ajax = function (num) {
     2   return new Promise(function (reslove, reject) {
     3     if (num > 1) {
     4       reslove();
     5       return;
     6     }
     7     throw new Error("错误");
     8   })
     9 }
    10 ajax(0).then(function () {
    11   console.log("正确");
    12 }).catch(function (err) {
    13   console.log(err);
    14 });

     下面是一个案例,目的是当页面的图片都加载完才把图片显示到页面中,如果其中有一个出错了就不显示。

     1 function loading(src) {
     2   return new Promise((resolve, reject) => {
     3     let img = document.createElement("img");
     4     img.src = src;
     5     img.onload = function () {
     6       resolve(img);
     7     };
     8     img.onerror = function (err) {
     9       reject(err)
    10     }
    11   })
    12 }
    13 
    14 function showimg(imgs) {
    15   imgs.forEach(function (img) {
    16     document.body.appendChild(img);
    17   });
    18 }
    19 Promise.all([
    20   loading("./img/banner01.jpg"),
    21   loading("./img/banner02.jpg")
    22 ]).then(showimg);

     下面这个例子是当图片先加载的先显示出来,没加载的就不再显示了。

     1 function loading(src) {
     2   return new Promise((resolve, reject) => {
     3     let img = document.createElement("img");
     4     img.src = src;
     5     img.onload = function () {
     6       resolve(img);
     7     };
     8     img.onerror = function (err) {
     9       reject(err)
    10     }
    11   })
    12 }
    13 
    14 function showimg(imgs) {
    15   let p = document.createElement("p");
    16   p.appendChild(imgs)
    17   document.body.appendChild(p);
    18 }
    19 Promise.race([
    20   loading("./img/banner01.jpg"),
    21   loading("./img/banner02.jpg")
    22 ]).then(showimg);
  • 相关阅读:
    让ios支持openssl
    数组
    NSValue
    音频
    NSObject分类
    NSJSONSerialization
    Java并发编程-深入探讨synchronized实现原理
    设计模式-挖掘工厂模式应用场景-全面分析工厂模式原理
    Spring插件安装
    Java并发编程-深入Java同步器AQS原理与应用-线程锁必备知识点
  • 原文地址:https://www.cnblogs.com/wuxianqiang/p/7237449.html
Copyright © 2011-2022 走看看