ES6学习(10)-- Promise对象

        ES6 提供的解决异步编程问题的Promise方法在我们工作中可谓是重点了。无论在什么样的公司面试,Promise都是重点考察对象。那么,为什么Promise会这么受重视?今天我们一起来看一下Promise的用法和存在的意义。

        在学习Promise之前,我们在阮一峰的ES6入门中可以看到介绍Promise对象的第一句话:

Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。

从中我们可以看到Promise对象的存在意义了吧!它是异步编程的一种解决方案。比传统的方法更合理更强大。所以,下面我们开始进入它的学习部分吧。

一,学前准备

在上边的引用中,我们可以看到几个关键点:异步编程,回调函数和事件。所以,我们在学习Promise对象前,首先要搞清楚这几个关键点,它们是我们更好理解Promise对象的前提。

什么是异步编程?

我们知道,JavaScript的执行环境是单线程。 
所谓单线程,是指JS引擎中负责解释和执行JavaScript代码的线程只有一个,也就是一次只能完成一项任务,这个任务执行完后才能执行下一个,它会「阻塞」其他任务。这个任务可称为主线程。 但实际上还有其他线程,如事件触发线程、ajax请求线程等。这也就引发了同步和异步的问题。

同步: 

同步模式,即上述所说的单线程模式,一次只能执行一个任务,函数调用后需等到函数执行结束,返回执行的结果,才能进行下一个任务。如果这个任务执行的时间较长,就会导致「线程阻塞」。同步模式比较简单,也较容易编写。但问题也显而易见,如果请求的时间较长,而阻塞了后面代码的执行,体验是很不好的。因此对于一些耗时的操作,异步模式则是更好的选择。

异步: 

异步模式,即与同步模式相反,可以一起执行多个任务,函数调用后不会立即返回执行的结果,如果任务A需要等待,可先执行任务B,等到任务A结果返回后再继续回调。 异步任务会在当前脚本的所有同步任务执行完才会执行。 

下面我们通过一个例子来看一下同步和异步的差别和关系:

<script>
    console.log("taskA")
    let flag = true
    window.setTimeout(function(){
        console.log("taskB")
    },0)
    window.setTimeout(function(){
        console.log("taskC")
    },10)
    window.setTimeout(function(){
        console.log("taskD")
    },0)
    console.log("taskE")
    // while(flag);
    console.log("taskF")
</script>


// -----结果-----
//taskA
//taskE
//taskF
//taskB
//taskD
//taskC

显而易见,setTimeout将内部操作变成了异步操作,所以它会在主线程进行到自己前边的时候,
将异步操作的代码放入任务队列中,然后等待主线程的同步操作结束,再从任务队列中取出执行的结果。

也许仔细的小伙伴已经发现了
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值