美文网首页
js任务管理和promise

js任务管理和promise

作者: 鸡毛菜菜子 | 来源:发表于2020-05-06 14:32 被阅读0次

任务管理

JavaScript是单线程。JavaScript在处理异步操作时,利用的是事件循环机制。

主线程中的任务执行完后,才执行队列中的任务。有新任务到来时会将其放入队列,采取先进先执行的策略执行队列中的任务。比如setTimeout同时到了时间,就要依次执行。下面通过一个例子来详细分析宏任务与微任务

微任务优先级高于宏任务

1.先执行宏任务,然后输出  后盾人

2.执行到setTimeout异步宏任务,将其放入到宏任务队列,等待执行

3.执行promise.then微任务,将其放入微任务队列,等待执行

4.然后执行到主代码输出  houdunren.com

5.主线程所有的任务处理完成

6.通过事件循环遍历微任务队列,将刚才放入的Promise.then微任务读取到主线程执行,然后输出 promise1

7.之后又执行promise.then产生的微任务,并放入微任务队列中

8.主线程任务执行完毕

9.再次事件循环遍历微任务队列,读取到promise2微任务放入主线程执行,然后输出 promise2

10.主线程任务执行完毕

11.此时微任务队列已经无任务,然后宏任务队列中读取setTimeout任务并加入主线程,然后输出 

定时器

#  Node环境下的宏任务

       1.I/O 操作

        2.setTimeout

        3.setInterval

        4.setImmediate

# Node环境下微任务

        1.Promise

        2.process.nextTick

promise

JavaScript 中存在很多异步操作,Promise 将异步操作队列化,按照期望的顺序执行,返回符合预期的结果。可以通过链式调用多个 Promise 达到我们的目的。

1.使用.then可以解决回调地域的问题,每次的then都是一个全新的promise。每个 then 会是一个新的promise,默认传递 fulfilled状态。

2.一个完整的promise,如果为错误,则必须对错误进行处理。

3.promise会立即执行,因此可以将其封装在函数里调用。

4.promise内有错误一个类似try...catch的处理机制,catch 可以捕获之前所有 promise 的错误,所以建议将 catch 放在最后。在 promise 中抛出的错误也会被catch 捕获

5..finally中的代码不论promise状态都会被执行

6.使用Promise.all 方法可以同时执行多个并行异步操作

根据用户名获取用户,有任何一个用户获取不到时 promise.all 状态失败,执行 catch 方法

7.allSettled 用于处理多个promise ,只关注执行完成,不关注是否全部执行成功,allSettled 状态只会是fulfilled。

p2 返回状态为 rejected ,但promise.allSettled 不关心,它始终将状态设置为 fulfilled 。

8.race()

使用Promise.race() 处理容错异步,和race单词一样哪个Promise快用哪个,哪个先返回用哪个。以最快返回的promise为准。如果最快返加的状态为rejected 那整个promise为rejected执行cache。如果参数不是promise,内部将自动转为promise。

9.使用 async/await 是promise 的语法糖,可以让编写 promise 更清晰易懂,也是推荐编写promise 的方式。

10.await 后面一般是promise,如果不是直接返回。await 必须放在 async 定义的函数中使用。await 用于替代 then 使编码更优雅。

使用async 设置定时器,并间隔时间来输出内容

相关文章

  • js任务管理和promise

    任务管理 JavaScript是单线程。JavaScript在处理异步操作时,利用的是事件循环机制。 主线程中的任...

  • js运行机制题型

    js运行的顺序是同步任务-》微任务栈-》宏任务栈,然后一直按照这个顺序 promise和setTimeout 第一...

  • js实现“锁”

    在js中需要让某些异步的任务按顺序执行的时候可以Promise.then(Promise).then..... 但...

  • 手写Promise

    基本实现new Promise 和 then /catch方法 Promise.js test.js测试 调用手...

  • JS_Promise底层原理封装

    JS_Promise底层原理封装 封装的难点在于如何让promise中的.then()变成一个微任务 ? 如何实现...

  • Promise - 04 Promise 的理解和使用

    Promise 的理解和使用 1: Promise 是什么? 抽象表达Promise 是 JS 中进行异步编程的新...

  • js-Promise基础

    js-Promise基础(第三周) Promise含义 promise意思为允诺、许诺、承诺在js中为了解决编写代...

  • js事件循环之微任务,宏任务

    js单线程特性使得所有任务都排队执行,有一个事件循环的概念,不做深入解释 概念 微任务:promise的then,...

  • RN-ErrorUtils处理崩溃、promise错误

    ErrorUtils.js路径 promise路径 ErrorUtils使用 promise使用

  • Promise.all 处理error

    Promise.all()接受一个由promise任务组成的数组,可以同时处理多个promise任务,当所有的任务...

网友评论

      本文标题:js任务管理和promise

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