美文网首页
js事件机制与Promise

js事件机制与Promise

作者: 摸摸大海参 | 来源:发表于2019-04-25 17:06 被阅读0次

(ps:不对之处,敬请指正!!!)

Event-Loop

众所周知,JavaScript是单线程的,不知是哪个天才提出了Event-Loop机制来处理单线程所带来的不便。js的Event-Loop:
1、js把任务分为两种:宏任务(一般代码、setTimeout...)与微任务(Promise.then...)
2、js在运行时,先执行宏任务(个人理解宏任务分两种:同步与异步),宏任务中的同步任务执行完,就去读取微任务,再执行下一轮Event-Loop。

这也是所以为什么setTimeout会在Promise.then的后面执行!因为setTimeout属于宏任务的异步任务,在下一轮Event-Loop才执行,而Promise.then在第一轮的微任务中执行了。

Promise

ES6的一大特点是提供了Promise处理异步。
在ES6以前,通常使用回调函数去处理异步,但如果大量使用回调函数会很容易造成回调地域。Promise的出现为处理异步带来的极大的方便。
先举例,再分析:

function createPromise () {
    var pro = new Promise((resolve, reject) => {
        if (5 > 3) {
            setTimeout(() => {
                resolve('这是传过去的数据')
            }, 1000)
        } else {
            reject('it\'s wrong')
        }
    })
    return pro
}

createPromise().then((data) => {
    console.log( '已接收:' + data)      // 已接收:这是传过去的数据
})
.catch((err) => {
    console.log('已接收:' + err) 
})

Promise就收一个回调函数,回调函数有两个参数:resolve和reject。resolve返回一个带有已完成参数的Promise对象,并执行then方法;reject返回一个带有拒绝参数的Promise对象,执行catch方法。

Promise.all

Promise.all专门用于处理多个Promise任务。

var tasks = []
tasks.push(createPromise1())
tasks.push(createPromise2())
tasks.push(createPromise3())

Promise.all(tasks).then((res) => {
    console.log(res)
})
.catch((err) => {
    console.log(new Date, '已接收:' + err) 
})

如果所有的Promise任务都是resolve,then方法会被执行,res是一个包含所有Promise实例resolve方法中的参数的数组;
如果有一个Promise实例是reject状态,将会执行catch,err为Promise.reject方法中的参数。
Promise.all().then方法中的res数组里面的数据顺序和Promise.all()接收到的数组顺序是相同的,即使createPromise3()完成得比createPromise1()快。

Promise.race

Promise.race与Promise.all相似,不同在于Promise.all().then方法中的结果数组是顺序的,而Promise.race().then方法中的结果数组的排序是根据Promise实例中哪个先执行完成决定的,先执行完的再前面,后执行完的在后面。

相关文章

  • JS 运行机制

    为什么 setTimeout 写在 Promise 前面却会比 Promise 后执行? JS 事件循环机制 简单...

  • js事件机制与Promise

    (ps:不对之处,敬请指正!!!) Event-Loop 众所周知,JavaScript是单线程的,不知是哪个天才...

  • 20、jQuery 事件机制

    20、jQuery 事件机制 原生js事件与jQuery事件: (1)用原生的js给div注册事件 原生js注册相...

  • Promise 事件机制

    执行循序 setTimout和promise 这里我们先要理解js是是单线程执行的。在内存中函数的执行是分同步和异...

  • ES6 Promise运行机制解析

    内容参考: 阮一峰 - JS运行机制MDN - Promise构造函数MDN - 使用Promise美团Promi...

  • js异步编程(updating)

    js 异步编程方式: Promise,generator/yield,async/await 回掉函数 js事件监...

  • 事件处理机制

    Node.js事件触发对象有哪些方法? 详细讲讲Node.js事件机制是怎样的? Node.js事件机制和Java...

  • javascript 中的事件机制

    js之事件机制 1、事件初探 1.1 js事件的概述 JavaScript事件:JavaScript是基于事件驱动...

  • ES6系列之Promise

    本篇目录 JS 同步与异步 常见异步处理回调函数事件监听Deferred对象 Promise对象概念 Promis...

  • 学习日记

    2020年3月1日 技术方面: 1初步了解js事件循环系统点击 2搞清楚了promise的错误处理机制 3研究了一...

网友评论

      本文标题:js事件机制与Promise

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