js中的Promise,同步与异步相关知识

同步与异步

程序的执行顺序
遇到同步任务直接执行,遇到异步任务先将其放入任务队列中,接着往下执行,直至所有同步任务执行完毕,再去任务队列中执行所有异步任务(异步任务是同时执行的)

异步任务

  • 定时器setTimeout、setInterval
  • ajax请求
  • promise.then
  • saync await

其中,异步任务分为宏任务及微任务,先执行微任务,再执行宏任务。
微任务:promise.then、saync await
宏任务:setTimeout、setInterval、ajax

process.nextTick是微任务,在所有微任务之前执行
setImmediate是宏任务,在所有宏任务之后执行

整个JavaScript的执行过程:

  • 同步任务
  • process.nextTick
  • 微任务:promise、async await
  • 宏任务:setTimeout、setInterval、ajax
  • setImmediate

Promise

  • Promise构造函数接收一个函数作为参数,该函数的两个参数是resolve,reject。异步任务执行成功时调用resolve函数返回结果,反之调用reject
  • Promise 类有.then().catch() 和 .finally() 三个方法,这三个方法的参数都是一个函数,.then()可以将参数中的函数添加到当前 Promise 的正常执行序列,.catch() 则是设定 Promise 的异常处理序列,.finally() 是在 Promise 执行的最后一定会执行的序列。.then()传入的函数会按顺序依次执行,有任何异常都会直接跳到 catch 序列
  • Promise中的内容是同步的,.then()中的内容是异步的
  • 调用了 resolve() 方法后才会将 .then() 中的内容加到任务队列中。resolve() 中可以传入一个参数,该参数可以在 .then() 中拿到。

例子

function fn(msg) {
    return new Promise(function (resolve, reject) {
        console.log(msg);
        resolve('OK');
    });
}
fn('password').then((data)=>{
	console.log(data);
})
// password OK
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值