什么是Promise?
当面试时问到什么是Promise? 应该怎么回答:
首先说一下Promise A+规范 , 当有一个符合Promise A+规范的 then 方法的对象.就是一个Promise.而 ES6 出现之后, 它带来了一个构造函数,通过这个构造函数,可以创建一个 满足Promise A+ 规范的Promise对象. 这就是Promise.
异步问题同步化的解决方案. Promise执行是同步的 (executor 同步)? p.then 是异步的
当说到Promise,它有两层含义:
Promise A+规范 (出现的时间点比较早,在ES6之前) 民间标准 (社区搞出来的) (2015年之前) 主要处理回调地狱和异步处理不统一的问题
符合PromiseA+规范的 (例如:)
一个对象包含一个then方法,是一个Promise
{ then:function(){} }
这个也是一个Promise
function A(){}
A.then = function(){}
直到ES6出来,搞了一个构造函数 Promise
. 整个构造函数和 Promise A+ 规范有什么关联呢?
当你通过构造函数去创建一个对象,创建的那个对象它是满足 Promise A+规范的. ES6吸纳了 Promise A+ 规范.
它创建的Promise 满足Promise A+ 规范,而且还增加了很多其他的东西.
比方说 它给里面增加了一个catch
方法, finally
, 增加了一些静态方法: Promise.all
,Promise.race
,Promise.resolve
等等.
这些并不是Promise A+ 规范中的规定. 而是ES6 中Promise新增的.
而且在Promise A+ 规范里面,它有一个说法.就是你只要满足Promise A+ 规范,你就是一个Promise, 而你只要是一个Promise.你们之间就可以互操作. (这个就比较有意思啦~~)
比如说我们用过的一个库jQuery
, 中有一个写法:
// 返回的是一个Promise,但是并不是ES6通过构造函数创建的Promise
// 而是它自己写的一套满足Promise A+规范的Promise,但是你感觉不到.仍然可以使用await关键字.可以使用.then方法
// 而且这个then 方法还可以跟我们这个ES6 的Promise进行互操作.
await $.ajax().then()
感觉上它好像就是ES6的Promise.但实际上它不是的. 不是它为什么能够进行互操作呢? 是因为 无论是 ES6 的Promise,还是你自己写的Promise,或者是第三方库里面自己实现的Promise.它们都满足 Promise A+ 规范. 只要满足这个规范.它们就可以互操作.
Comments
请在后台配置评论类型和相关的值。