当前位置: 首页 > backend >正文

如何理解promise 续一

某些关于promise的问题

能否执行多个回调?

当promise改变为对应状态时都会调用

let p = new Promise((resolve , reject) =>{resolve('success')})p.then(v=>{console.log(v)})p.then(v=>{alert(v)})

在这里插入图片描述

promise.then()返回的新promise的结果状态由什么决定

由then()指定的回调函数执行的结果决定

  • 如果抛出异常,新promise变为rejected,reason为抛出的异常
let p = new Promise((resolve, reject) => {resolve('success')})let result = p.then(v => {throw '错误'}, err => {console.log(err)})console.log(result)

在这里插入图片描述

  • 如果返回的是非promise的任意值,新promise变为resolved,value为返回的值
let p = new Promise((resolve, reject) => {resolve('success')})let result = p.then(v => {return 123}, err => {console.log(err)})console.log(result)

在这里插入图片描述

  • 如果返回的是另一个新promise,此promise的结果就会成为新promise的结果
let p = new Promise((resolve, reject) => {resolve('success')})let result = p.then(v => {return new Promise((resolve, reject)=>{resolve('ok')})}, err => {console.log(err)})console.log(result)

在这里插入图片描述

promise如何串连多个操作任务

  • promise的then()返回一个新的promise,可以写成then()的链式调用
  • 通过then的链式调用串连多个同步/异步任务
let p = new Promise((resolve, reject) => {resolve('success')})let result = p.then(v => {return new Promise((resolve, reject)=>{resolve('ok')})}).then(value=>{console.log(value)})

在这里插入图片描述

let p = new Promise((resolve, reject) => {resolve('success')})let result = p.then(v => {return new Promise((resolve, reject)=>{resolve('ok')})}).then(value=>{console.log(value)}).then(value=>{console.log(value)})

在这里插入图片描述

第二个undefined 产生的原因:

是因为then的返回结果是promise ,promise的返回状态由这个promise的返回值决定的;但是代码中的第一个then的返回值没有写,则第二个的结果就是undefined

promise 异常传透

  • 当使用promise的then链式调用时,可以在最后指定失败的回调
  • 前面任何操作出了异常,都会传到最后失败的回调中处理
let p = new Promise((resolve, reject) => {reject('fail')})let result = p.then(v => {return new Promise((resolve, reject)=>{resolve('ok')})}).then(value=>{console.log(value)}).then(value=>{console.log(value)}).catch(err=>{console.log(err)})

在这里插入图片描述

let p = new Promise((resolve, reject) => {resolve('success')})let result = p.then(v => {return new Promise((resolve, reject)=>{resolve('ok')})}).then(value=>{throw 'fail1'}).then(value=>{console.log(value)}).catch(err=>{console.log(err)})

在这里插入图片描述

中断promise 链

let p = new Promise((resolve, reject) => {resolve('success')})let result = p.then(v => {console.log(11)return new Promise(()=>{})}).then(value=>{throw 'fail1'}).then(value=>{console.log(value)}).catch(err=>{console.log(err)})

在这里插入图片描述

尝试自定义promise搭建

在html 页面中,先将promise的使用结构搭建出来

	<script type="text/javascript">let p =new Promise((resolve,reject)=>{resolve('success')})p.then(data=>{console.log(data)},err=>{console.warn(err)})</script>

新建一个promise.js文件,在html中引入这个promise

<script src="../js/promise.js" type="text/javascript" charset="utf-8"></script>
//覆盖Promise
function Promise(exectuor){// resolve 函数——表示成功执行的函数function resolve(data){}//reject 函数——表示失败执行的函数function reject(data){}//同步调用exectuorexectuor(resolve,reject);
}
//添加then 方法
Promise.prototype.then= function(onResolved,onRejected){}
http://www.xdnf.cn/news/2555.html

相关文章:

  • 准确--如何在 Windows 上安装并管理多个 Python 环境
  • 【SpringMVC文件上传终极指南:从基础配置到云存储集成】
  • 在亚马逊云服务器上部署WordPress服务
  • Pikachu靶场-目录遍历
  • WPF-遵循MVVM框架创建图表的显示【保姆级】
  • 【学习笔记】计算机操作系统(一)—— 操作系统引论
  • dify实际开发中遇见的几个小问题
  • 基于ART光学跟踪系统打造具有开创性的人车互动VR解决方案
  • 产品经理面经(1)
  • 使用Nestjs, Bun 和 NCC 打造高效的 Node.js 应用构建流程
  • Shell脚本-while循环应用案例
  • Python入门基础
  • w~嵌入式C语言~合集4
  • 深度解析:Web Crawling与Web Scraping的区别与联系
  • 数据结构二叉树与二叉搜索树c实现代码
  • SVT-AV1源码分析-函数svt_aom_motion_estimation_kernel
  • 解决Keil/MDK无法跳转(go to define)问题
  • 2025年AEJ SCI2区:增强麻雀搜索算法CERL-SSA+工业物联网感知通信,深度解析+性能实测
  • SpringBoot配置RestTemplate并理解单例模式详解
  • layui获取无法获取表单数据,data.field一直为空
  • SPL 量化 复权数据
  • 双指针算法(2)——复写零
  • GAMES202-高质量实时渲染(Real-Time Shadows)
  • STM32 CAN通信 HAL库实战教程:从零到测试成功
  • 【计算机网络分类全解析】从局域网到广域网的工程实践
  • 【三大特性】虚表 内存分布
  • Marmoset Toolbag 5.0 中文汉化版 八猴软件中文汉化版 免费下载
  • C# 类(Class)教程
  • 浮点数:IEEE 754标准
  • PCIe 转 U.2 接双硬盘指南 - 超微(Supermicro)主板