09月17, 2024

当面试被问到什么是Promise?该如何回答~

什么是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+ 规范. 只要满足这个规范.它们就可以互操作.

本文链接:https://901web.com/post/how_to_answer_what_is_promise.html

-- EOF --

Comments

请在后台配置评论类型和相关的值。