[红宝书]第11章-Promise

简介: [红宝书]第11章-Promise

前言



本文是有关《Javascript高级程序设计》第11章内容的总结,并结合掘金的一些博客,总结一下Promise


Promise



基本用法


关于Promise的一些Api和基础的用法,相信大家有已经了解,这里就不再赘述,只是做一个小的总结


image.png


这是Promise的一些Api,不熟悉的可以自行百度查看~


同步/异步执行的二元性


try { 
    Promise.reject(new Error('bar')); 
} catch(e) { 
    console.log(e); 
} 
// Uncaught (in promise) Error: bar


这里的Promise.reject()明明是同步创建出来一个reject的promise的实例,为什么还是不能被try...catch...捕获到呢?

这里的同步代码之所以没有捕获Promise抛出的错误,是因为它没 有通过异步模式 捕获错误。从这里就可以看出Promise真正的异步特性: 它们是同步对象(在同步执行模式中使用),但也是异步执行模式的媒介。

拒绝Promise的错误并没有抛到执行同步代码的线程 里,而是通过浏览器异步消息队列来处理的。因此,try /catch 块 并不能捕获该错误。代码一旦开始以异步模式执行,则唯一与之交互 的方式就是使用异步结构——更具体地说,就是Promise的方法。


thenable接口


任何对象有一个then()方法,就认为是实现了Thenable接口


class MyThenable { 
    then() {} 
}
const MyThenable = {
    then(){}
}
const MyThenable = {
    then: function(){}
}


Promise.prototype.then()


let p1 = new Promise((resolve) => {resolve('p1')})
let p2 = p1.then(() => {
    console.log('p2')
})
let p3 = p2.then(() => {
    console.log('p2的状态',p2)
    console.log('p3')
})
// p2
// p2的状态 Promise { undefined }
// p3


新期约实例基于onResovled 处理程序的返回值构建。换句话说,该处理程序的返回值会通过Promise.resolve() 包装来生成新 期约。如果没有提供这个处理程序,则Promise.resolve() 就会包 装上一个期约解决之后的值。如果没有显式的返回语句,则 Promise.resolve() 会包装默认的返回值undefined 。

由于p1没有返回值,所以p2的值是undefined,但是都是resolved的状态

注意

抛出异常会返回拒绝的期约

返回错误值不会触发上面的拒绝行为,而会把错误对象包装在 一个解决的期约中


Promise.resolve


  • 如果参数是 Promise 实例,那么Promise.resolve将不做任何修改、原封不动地返回这个实例
  • 参数是一个thenable对象,Promise.resolve()方法会将这个对象转为 Promise 对象,然后就立即执行thenable对象的then()方法。
  • 如果参数是一个原始值,或者是一个不具有then()方法的对象,则Promise.resolve()方法返回一个新的 Promise 对象,状态为resolved



目录
相关文章
|
前端开发
promise的一些巨坑
promise的一些巨坑
|
前端开发
一篇搞懂promise
一篇搞懂promise
107 0
|
7月前
|
前端开发 JavaScript API
一盏茶的功夫帮你彻底搞懂JavaScript异步编程从回调地狱到async/await
在深入讨论 async/await 之前,我们需要了解一下 JavaScript 的单线程和非阻塞的特性。JavaScript 是单线程的,也就是说在任何给定的时间点,只能执行一个操作。然而,对于需要大量时间的操作(例如从服务器获取数据),如果没有适当的管理机制,这种单线程特性可能会导致应用程序的阻塞。为了解决这个问题,JavaScript 引入了回调函数和后来的 Promise,用来管理这些异步操作。
|
前端开发 JavaScript
Promise入门/面试必看
Promise入门/面试必看
75 0
|
前端开发 JavaScript
【面试题】说一下promise的理解
promise详解,方法的应用场景
116 0
【面试题】说一下promise的理解
|
前端开发 JavaScript
搞懂Promise
搞懂Promise
55 0
|
前端开发 JavaScript API
谈谈你对promise的理解?
Promise是ES6异步编程的一种解决方案(目前最先进的解决方案是async和await的搭配(ES8),但是它们是基于promise的),从语法上讲,Promise是一个对象或者说是构造函数,用来封装异步操作并可以获取其成功或失败的结果。
100 0
|
前端开发
Promise是什么?怎么用?
Promise 是一种异步编程的解决方案。它可以使异步操作更加清晰、简单、优雅,避免了回调地狱的问题。Promise 对象表示一个异步操作的最终完成或失败,并且它的最终状态(完成或失败)和返回值(或错误)不依赖于调用它的代码。
|
存储 缓存 自然语言处理
吊打面试官:promise原理详解
吊打面试官:promise原理详解
204 0