再次认识期约,那些我不知道的事

1,938 阅读3分钟

「这是我参与2022首次更文挑战的第2天,活动详情查看:2022首次更文挑战」。

如果我们彼此相识,却又不熟,那不如让我来重新认识你一遍~~~😍

  • 再次对你的初了解


JS中有很多异步操作,promise可以将异步操作队列化然后按照期望顺序执行,返回预期的结果。也可以通过链式调用promise来达到我们的目的。(promise是一个拥有then方法的对象或函数)。

promise队列 队列中promise下一个成员依赖上一个成员的状态改变;

promise状态时单向的,不可逆的不可撤销的

  • 了解你的任务排序


js是不断轮询任务列表或者任务集合的,任务就是先进先出也就是先进先执行;

先主进程执行完毕,再进行轮询任务队列(主线程结束再对异步进行处理);

文件加载,谁的快,谁就先进任务队列;

这种情况会出现的问题就是再调用文件里面的方法时会有概率出错,所以比较笨的方法就是在文件嵌套中进行调用也就是回调地狱,以保证文件有顺序的进行加载。

  • 异步请求时的任务管理

    首先通过http请求后台数据,之后向任务队列中抛一个任务,当主线程的任务全部执行完毕,就开始轮询任务集合。

  • 宏任务与微任务的顺序(js代码的优先级)

    同步的优先级是最高的

    同步》微任务》宏任务

  • 对于宏任务的提升好像有些误会


let promise = new Promise(resolve => {
    setTimeout(() => {
        resolve();
        console.log("setTimeout");
    },0)
    console.log("promise");
}).then(value => console.log("成功"))
console.log("jxx");
// 执行结果: prmise, jxx, setTimeout, 成功

原因是因为先进行同步,所以先输出promise和jxx,再进行宏任务(setTimeout) 中,宏任务又调到主线程进行执行,执行过程中又创建了微任务,此时的微任务进行到下一次轮 询中,所以接下来输出setTimeout和“成功”。

  • 认识promise.then的基本语法


then是对上一个promise状态的处理

当then进行链式操作时,无论第一个then返回的是成功还是失败,后面的then都默认为成功

    let p1 = new Promise((resolve, reject) => {
      reject("jxx");
        }).then(
          value => console.log(value),
          reason => console.log('eror'+ reason)
        ).then(
          value => console.log(value), // 此时运行这里,因为上面的then返回的为promise
          reason => console.log('error'+reason)
        )
  • promise内部对于错误的处理

    无论是reject的错误 还是手动抛出的错误 还是报错 在then中 都会执行错误的回调

    promise监测错误报告统一放在catch中进行处理,然后catch放在then的最后进行捕获错误

  • promise一些常用的关键字


finally: 无论在成功还是失败都一定会执行

reject: 在成功状态下我们可以通过抛异常或者通过使用promise.reject来改变我们本次promise的状态

all: 批量获取数据

allSetted: 始终返回的是成功不会有失败

race: 后台请求超时处理,哪个返回的快用哪个