• 目录
  • 简介
  • 收藏

    烂尾楼

    莫导喜欢听人叫他爸爸…… 要是让莫导的广大粉丝知衣冠禽兽的莫导居然有这个癖好……   你以为会发生 粉转黑、路转喷这样的事情吗?   不,他们会说我们愿意。   爸爸爹爹皇阿玛,换着花样叫都行!   床上床下叫都没关系!

    乱码

    小说: 烂尾楼 作者:衣衫似风雪 字数:1432 更新时间:2024-03-29 17:50:21

    18.JS中的异常处理

    try..catch

    try..finally

    try...catch..finally

    19.ES6 Promise 解决回调地狱

    19-1、 promise:为了解决异步编程中的回调地狱而产生

    Promise的实例需要接收一个函数作为参数

    该函数又需要接收两个函数数作为参数

    resolve 函数

    reject 函数

    19-2、promise 的三种状态

    pending 进行中

    fullfilled 已成功 resolved 成功 执行resolve函数

    rejected 已失败 rejected 失败 执行reject函数

    19-3、then方法

    参数一:是resolve函数的实现

    参数二:是reject函数的实现

    19-4、then方法返回值的是一个新的Promise实例

    注意,不是原来那个Promise实例

    若前一个回调函数返回的是一个Promise对象(即有异步操作)时,

    后一个回调函数,会等待该Promise对象的状态发生变化,才会被调用。

    19-5、promise的异常处理

    建议总是使用catch方法。

    Promise 对象的错误具有“冒泡”性质,会一直向后传递,直到被捕获为止。

    Promise 的状态一旦改变,就永久保持该状态,不会再变了。

    catch方法返回的还是一个 Promise 对象

    catch和reject同时出现时,只执行reject

    19-6、多个异步操作

    // 加载图片函数

    function loadPic(id, src, sec) {

    return new Promise((resolve, reject) => {

    let oImg = new Image();

    oImg.onload = function () {

    resolve(oImg);

    }

    oImg.onerror = function () {

    reject(`编号为${id}的任务失败`);

    }

    // oImg.src = src;

    setTimeout(() => {

    oImg.src = src;

    }, sec); //延迟加载函数

    })

    }

    let s1 = "远程图片";

    let s2 = "远程图片";

    let p1 = loadPic('001', s1, 1000);

    let p2 = loadPic('002', s2, 100);

    // Promise.all 方法

    // 当所有图片都加载完在执行后续动作,有一张失败都不执行then

    let p = Promise.all([p1, p2]); //all返回新的promise对象

    p.then(data=>{

    console.log(data,'加载成功');

    document.body.append(data[0],data[1]);

    }).catch(err=>{

    console.log(err);

    }).finally(()=>{

    console.log('不论成功与否,我都执行');

    });

    // Promise.race 方法

    // 注:

    // 1.只要有一张图片加载完成,就执行then的resolve实现

    // 2.如果先加载的图片有失败的情况,后续图片就不加载,直接执行catch 或 reject

    let p = Promise.race([p1, p2]);

    p.then(data => {

    console.log(data); //只返回最先加载成功的那个

    document.body.append(data); //由于设置了延迟,所以第二个先加载完成

    }).catch(err => {

    console.log(err);

    })

    作者:也在水湄

    链接:https://www.jianshu.com/p/d23a506cdca2

    来源:简书

    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    Email
    lovenovelapp@gmail.com
    Facebook主页
    @Lovenovel
    Twitter
    @lovenovelapp