前端 js 之 promise( 第一版 23.11.18) 09

news2024/11/24 12:04:51

感觉自己好笨,知识点表达的不够明晰,也正是因为如此,说明有很大的进步空间,更要在此努力!

文章目录

  • 前言
  • 一、作用
  • 二、使用步骤
  • 三、promise 类
  • 四、promise 方法


前言

每一个新技术的出现,都是解决原有技术上的某一个痛点,直入主题,我们今天来看下promise的作用


一、作用

        假设我们用定时器模拟一个接口,假设url是争取的我们就表示请求成功,否则失败,大概2s后会告诉我们接口请求的结果。

  1. 我们调用一个函数,这个函数中发送网络请求(我们可以用定时器来模拟);
  2. 如果发送网络请求成功了,那么告知调用者发送成功,并且将相关数据返回过去;
  3. 如果发送网络请求失败了,那么告知调用者发送失败,并且告知错误信息;
	function requestData(){
      setTimeout((()=>{
        if(url==='dkjfdkf'){
          successCallback('返回成功的回调')
        }else{
          errorCallback('返回失败的回调')
        }
      })2000)
     },

假设可能判断是否成功的条件有以下:

 
 function requestData(){
  setTimeout((()=>{
    if(url==='dkjfdkf'){
      let result1 = successCallback('返回成功的结果')
      if(result1==true){
        let result2 = successCallback('返回成功的结果')
        if(result2 ==true){
          successCallback('返回成功的回调')
        }
      }
    }else{
      errorCallback('返回失败的回调')
    }
  })2000)
},

  1. 因为异步操作什么时候返回结果是不可控的,如果要按顺序来请求,就只能将这些操作嵌套起来,如果回调函数嵌套过多,中间有一个回调函数发生错误可能结果就错了,而且很难排查是哪个回调函数发生了错误,代码就很难维护而且难以阅读。当我们需要处理多个异步操作时,我们可以使用promise,
  • promise 异步编成的一种解决方式,它将异步操作封装一个promise 类,通过链式调用的方式来处理多个异步操作,避免了回调地狱问题

  • 还有一种方式,async/await ,可以让异步代码看起来像同步代码,它是基于promise实现的

  • 回调地狱是指在异步编程中,回调函数嵌套过多,导致代码难以维护和阅读的情况。

二、使用步骤

  1. Promise是一个类,通过 new 创建 一个Promise对象,会传入一个回调函数,这个回调函数有两个参数,resolve和reject , 这个回调函数会立即执行,调用resolve回调会执行.then方法,调用reject回调时,会执行Promise对象的catch方法
	const pro = new Promise((resolve,reject)=>{
	   if(网络请求成功){  
	     resolve('成功')
	   }else{
	     reject('失败')
	   }
	})
	
	pro.then(res=>{
	  //   执行resolve
	})
	pro.catch(res=>{
	  //   执行resolve
	})
  1. 上面Promise使用过程,我们可以将它划分成三个状态:
    待定(pending): 初始状态,既没有被兑现,也没有被拒绝;new promise 的回调函数里
    已兑现(fulfilled): 意味着操作成功完成; resolve回调
    已拒绝(rejected): 意味着操作失败;reject 回调

  2. 一旦状态被确定下来,Promise的状态会被 锁死,该Promise的状态是不可更改的

  3. 如果resolve传入一个普通的值或者对象,那么这个值会作为then回调的参数;如果resolve中传入的是另外一个Promise,那么这个新Promise会决定原Promise的状态:

三、promise 类

我们都知道,promise 是通过new的方式创建出来的,那说明promise是一个类,

console.log(Promise.prototype)   // 打印不出来,因为内部方法都是不可枚举
console.log(Object.getOwnPropertyDescriptor(Promise.prototype))  // 发现then catch all 

在这里插入图片描述

        我们模拟下promise 的 then方法,promise是一个类,默认一进来就会走constructor里的方法,接收一个回调函数,并是立即执行的回调函数, 回调函数里两个函数,如果使用then 的方法,就会把then方法传进来的回调函数临时保存起来,promise内部就是就是各种回调函数各种调

class Promise(){
  constructor(executor){
    const resolve=()=>{
      this.callback()
    }
    const reject=()=>{

    }
    executor(resolve,reject)
  }
  then(callback){
    this.callback=callback
  }
}

const promise = new Promise((resolve,reject)=>{})  // promise里的箭头函数就相当于executor


四、promise 方法

  1. then 成功的回调
  2. catch 失败的回调
  3. finally 都会走的回调
  4. all 传入多个promise , promise的状态都为fulfilled 才会走
  5. allselttled 多个promise都有结果才走
  6. race 有一个成功就会走的回调

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1224188.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux网络——HTTP

一.应用层 我们程序员写的一个个解决我们实际问题, 满足我们日常需求的网络程序, 都是在应用层. 我们上一次写的网络版本计算器就是一个应用层的网络程序。 我们约定了数据的读取,一端发送时构造的数据, 在另一端能够正确的进行解析, 就是ok的. 这种约定, 就是应…

电子电器架构 —— 车载网关边缘节点路由转发策略

电子电器架构 —— 车载网关边缘节点路由转发策略 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 PS:小细节,本文字数5000+,详细描述了网关在车载框架中的具体性能设置。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 没有人关注你。也无…

SpringCloud -Token传递之Feign

目录 方法一 RequestHeader 方法二 使用Feign的Interceptor 步骤一 实现RequestInterceptor接口 步骤二:配置Feign 通常微服务对于用户认证信息解析有两种方案 在 gateway 就解析用户的 token 然后路由的时候把 userId 等相关信息添加到 header 中传递下去。在…

观测云助力跨境电商大幅提高加载性能

话不多说,先上结果 什么是用户体验 用户体验基本包含访问网站的性能、可用性和正确性。通俗的讲,就是一把通过用户访问测量【设计者】意图的尺子。 用户体验的基本价值 如果正确实施了终端用户体验,可以第一时间发现,确认影响了…

腾讯云服务器新用户优惠有哪些?腾讯云服务器新人优惠整理汇总

你们是否曾经幻想过拥有一台属于自己的服务器,却因为价格而望而却步呢?今天,我要告诉你一个好消息——腾讯云服务器现在针对新用户推出了一系列的优惠政策,让你可以用超低的价格购买到性能强大的服务器! 首先&#xf…

后端老项目迁移方法

老项目迁移方法 需求: 因某个模块MySQL表结构、表关系 错乱复杂,而且其他模块的代码也在操作这个模块的数据库 耦合严重 导致Web工程代码紊乱、不易理解、性能低下, 故在 系统由A JavaWeb工程迁移至B工程 时,重构MySQL表结构、表…

LaTeX 数学公式常见问题及解决方案

本文汇总了博主在使用 LaTeX 写文档过程中遇到的所有数学公式常见问题及对应的 LaTeX 解决方案 持续更新... 目录 1. 连等式2. 公式重新开始编号2.1 图片/表格重新编号 1. 连等式 在数学公式推导过程中常常会遇到如 Figure 1 所示的连等式,一般需要保证等号或者不等…

Halcon (0):C# 联合Halcon方式简介和就业市场说明

文章目录 文章专栏前言相关视频联合C#开发直接导出C#代码Halcon引擎调用开发函数封装库工程导出 总结就业市场 文章专栏 Halcon开发 前言 根据我的测试,我发现Halcon和WPF中的halcon插件,代码具有对应性。就是你会了Halcon,WPF也差不多久会了…

带您识别RJ45网口连接器/网口插座口的LED灯的平脚/斜脚,带弹/不带弹细节区分

Hqst华强盛(盈盛电子)导读:网口连接器,网口插座,也叫网口母座,因为产品规格众多,常常因为细小差别,耽误工程设计级或者生产排期延误,今天就带大家一起来认识下平脚RJ45网口连接器/网口插座与斜脚…

基于深度学习的单帧图像超分辨率重建综述

论文标题:基于深度学习的单帧图像超分辨率重建综述作者: 吴 靖,叶晓晶,黄 峰,陈丽琼,王志锋,刘文犀发表日期:2022 年9 月阅读日期 :2023.11.18研究背景: 图像…

剑指JUC原理-20.并发编程实践

👏作者简介:大家好,我是爱吃芝士的土豆倪,24届校招生Java选手,很高兴认识大家📕系列专栏:Spring源码、JUC源码🔥如果感觉博主的文章还不错的话,请👍三连支持&…

CTF-PWN-tips

文章目录 overflowscanfgetreadstrcpystrcat Find string in gdbgdbgdb peda Binary ServiceFind specific function offset in libc手工自动 Find /bin/sh or sh in library手动自动 Leak stack addressFork problem in gdbSecret of a mysterious section - .tlsPredictable …

【Python数学练习1】

一、题目 中文描述&#xff1a; 给出正整数N&#xff0c;输出满足条件的数对(a,b)的个数&#xff0c;满足gcd(a,b)b, a,b < n 数学描述&#xff1a; 二、解法 解法1&#xff1a; 对应Python代码&#xff1a; def num_fact(n):num 0for i in range(1, n 1):if n % i …

Python程序打包指南:手把手教你一步步完成

最近感兴趣想将开发的项目转成Package&#xff0c;研究了一下相关文章&#xff0c;并且自己跑通了&#xff0c;走了一下弯路&#xff0c;这里记录一下如何打包一个简单的Python项目&#xff0c;展示如何添加必要的文件和结构来创建包&#xff0c;如何构建包&#xff0c;以及如何…

视频剪辑技巧:简单步骤,批量剪辑并随机分割视频

随着社交媒体平台的广泛普及和视频制作需求的急剧增加&#xff0c;视频剪辑已经成为了当今社会一项不可或缺的技能。然而&#xff0c;对于许多初学者来说&#xff0c;视频剪辑可能是一项令人望而生畏的复杂任务。可能会面临各种困难&#xff0c;如如何选择合适的软件和硬件、如…

栈和队列的初始化,插入,删除,销毁。

目录 题外话 顺序表和链表优缺点以及特点 一.栈的特点 二. 栈的操作 2.1初始化 2.2 栈的销毁 2.3 栈的插入 2.3 输出top 2.4 栈的删除 2.5 输出栈 题外话 顺序表和链表优缺点以及特点 特点&#xff1a;顺序表&#xff0c;逻辑地址物理地址。可以任意访问&#xff0c…

systemverilog:interface中端口方向、Clocking block的理解

1、interface中端口方向的理解 &#xff08;1&#xff09;从testbench的角度看&#xff0c;tb中信号的输入输出方向与interface中信号输入输出方向一致&#xff1a; &#xff08;2&#xff09;从DUT角度看&#xff0c;DUT中信号输入输出方向与interface中信号输入输出方向相反…

数据库的分库分表 详解

前言 一个系统随着用户量上升&#xff0c;产生的数据也越来越多&#xff0c;到达一定程度&#xff0c;数据库就会产生瓶颈。 首先单机数据库所能承载的连接数&#xff0c;io和吞吐量都是有限的&#xff0c;并发量上来数据库就渐渐顶不住了。 如果单表的数据量过大&#xff0…

腾讯云新用户优惠活动有哪些可以参加?腾讯云新人服务器优惠活动

腾讯云作为国内领先的云服务提供商&#xff0c;不仅为用户提供稳定可靠的云服务器&#xff0c;还为新用户带来了一系列的优惠活动和代金券&#xff0c;以降低购买成本&#xff0c;提高业务效益。在这里&#xff0c;我们将为您详细介绍腾讯云服务器的新人优惠活动及代金券&#…

JavaEE——简单认识HTML

文章目录 一、简单解释 HTML二、认识 HTML 的结构三、了解HTML中的相关标签1.注释标签2.标题标签3.段落标签 p4. 换行标签 br5.格式化标签6.图片标签解释 src解释 alt解释其他有关 img 标签的属性 7.超链接标签 a8.表格标签9.列表标签10.input 标签11. select 下拉菜单以及 div…