Promise对象

在不使用Promise对象,仅使用简单的回调函数来实现异步操作时(如setTimeout),JavaScript引擎(主线程)都会依赖于浏览器的其他线程(如定时触发线程)来并发的执行异步任务的第一个阶段,当第一个阶段结束时,返回结果并将作为异步任务的第二个阶段的回调函数推送入消息队列中,依靠Event Loop让主线程读取执行,那么,使用Promise对象时,Promise对象是否就像是一个代理,浏览器的辅助线程首先将异步任务第一阶段的结果传递给Promise对象,并改变Promise对象的状态,然后通过Promise对象将异步任务比一阶段执行的结果传递给调用之前通过then()或catch()为异步任务第二个阶段注册的回调函数,从而来执行异步任务的第二阶段?那么通过then()或catch()注册的回调函数也会进入消息队列中吗?浏览器是不是也有一个线程来管理Promise对象,就像浏览器的HTTP异步请求线程来管理Ajax一样?是不是使用Promise后,更加繁琐了?对于Promise的本质还是没有弄清,有没有大神能够形象的讲解一下Promise到底和普通的回调函数实现异步有那些区别.....不胜感激

阅读 3.3k
4 个回答

有没有大神能够形象的讲解一下Promise到底和普通的回调函数实现异步有那些区别.

没区别,它就是一个工具性质的封装。跟你定义一个函数来封装重复用到的逻辑一样。

Promise 不是语言层面上的异步,就是用 JS 实现的一个函数,换句话说跟队列,堆栈一样,可以理解成为另一种数据结构。

JS 中的 Promise 就是用代码定义了一个名字叫 Promise 的构造函数,在 A+ 规范中构造函数上有 all 和 race 方法,实例上有 then resolve reject 等方法。

正常的函数咋执行,Promise 也就咋执行,看一些简单的符合 Promise 规范的类库,就都明白了。

感觉只是一种语法糖,用它的链式写法,来解决传统异步回调地狱的痛苦的。

es7的 async/await比它更甜

新手上路,请多包涵

Promise与传统的异步功能上是没有区别的。Promise的出现是为了解决传统异步回调出现的回调地狱问题,将层层嵌套的回调变成了链式实现。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题