js之promise

news2024/11/20 6:15:28
##### 仅做记录复习使用 ####

数据有点混乱 暂时不要看

promise

promise是一个对异步操作进行封装并返回其结果的构造函数.

使代码更加简洁和避免回调地狱。

promise是浏览器引擎自带的(但不是所有浏览器都支持promise)
在这里插入图片描述

promise的参数是一个函数且必须有这个函数,否则报错,姑且命名为A函数;

let p = new Promise()
console.log(p); // TypeError: Promise resolver undefined is not a function

A函数里有两个参数,这两个参数也是函数。res和rej这两个参数都是函数,名字随意。
res是成功时的回调
rej是失败时的回调

在这里插入图片描述
new Promise函数是同步函数,并且是立即执行的。

promise共有三种状态,pending,fulfilled,rejected

状态只能从pending变为fulfilled状态,成功状态。
或者从pending变为rejected状态,失败状态。

promise只有这两种转变状态,是转变状态哈。在无其他状态。
而一旦转变状态确定,就不可更改。
例如:pending转变到fulfilled,状态就确定了,只能是fulfilled状态;如果想转成rejected状态,是不能转的。

当promise刚new出来时,是pending状态。
在这里插入图片描述
promise函数对象有三个属性,如上图展示的,[[Prototype]]其实就是是__ proto__;其他两个属性如下:

PromiseState:就是promise的现在状态。

当你调用res函数,状态立马变为fulfilled(成功状态)
在这里插入图片描述

当你调用rej函数,状态立马变为rejected(失败状态)
在这里插入图片描述
如果两个状态都存在,以谁先调用为准在这里插入图片描述

PromiseResult :res或rej返回的结果

PromiseResult就是res或rej执行后的返回的结果,是返给then的。
在这里插入图片描述
在这里插入图片描述

当你new 一个promise时,就已经开始自动执行函数。promise是同步的,但then是异步的,要注意区分。

在这里插入图片描述
在这里插入图片描述

promise实例原型上的then函数

在这里插入图片描述
res函数和rej函数返回的数据,谁来接收的,用then函数。
then函数里的参数是两个异步回调函数,是异步的哈,第一个参数函数用于接收res返回来的数据,第二个参数函数用于接收rej返回的数据。

then的第一个参数函数里的形参用来接收res返回的数据。
在这里插入图片描述

then的第二个参数函数里的形参用来接收rej返回的数据。
在这里插入图片描述
其实then里面的函数就是res和rej
在这里插入图片描述

如果new promise中没有写res或rej ;则then里的函数不会执行

let p = new Promise((res,rej)=>{
	
})

p.then(val=>{
	console.log(11); // 11不输出
})

then的返回值

1、如果(父级)上一个then返回的是数据或undefined,则(子级)下个then的状态为成功状态,并将父级返回值返回到子级then的参数里面
let p = new Promise((res,rej)=>{
	res(11)
})
// 父级then
let p1 = p.then(val=>{
	console.log(val); // 11
	// 默认是return undefined
})
// 子级then ,then中的参数是上一个then返回的值,
p1.then(value=>{
	console.log(value); // undefined
})

在这里插入图片描述
父级then返回的是一个数据:

let p = new Promise((res,rej)=>{
	res(11)
})

let p1 = p.then(val=>{
	console.log(val);
	return {name:'wyy'}
})

p1.then(value=>{
	console.log(value);
})

在这里插入图片描述

如果父级then抛出的是一个错误,则父级then的状态为失败状态,并将失败状态的值返回给子级then

通过throw主动抛出错误或者代码出现错误,则promise的状态为rejected,值为throw的值;或者代码出错也为rejected状态,例如输出一个不存在的a;console.log(a)。

第二个then的promise实例状态是根据p.then的返回值决定的
在这里插入图片描述
在这里插入图片描述
如果没有return,则默认为undefined,即是fulfilled状态。

小结:

3、通过throw主动抛出错误或者代码出现错误,则promise的状态为rejected,值为throw的值;或者代码出错也为rejected状态,例如输出一个不存在的a;console.log(a)。

4、通过return 返回一个promise对象,则新promise就是return的promsie,其中的值就是resolve和reject传递的值

catch

catch是处理rej函数的。当返回错误时调用catch
在这里插入图片描述
当new promise出现rej(), throw, 语法错误以上三种形式式,就会调用catch函数。

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

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

相关文章

全网详细解决Set-Location : 找不到接受实际参数“xxx”的位置形式参数。 所在位置 行:1 字符: 1的错误,并深究该错误的原因。

文章目录1. 复现错误2. 分析错误3. 解决问题4. 文末总结1. 复现错误 今天使用PowerShell从C:\Users\baoya>目录切换到C:\Program Files\MySQL\MySQL Server 5.7\bin时,却报出如下图的错误: 即找不到接受实际参数“Files\MySQL\MySQL”的位置形式参数。…

vue最易理解且详细的调用swiper插件

我们最开始接触的是在操作dom时候的时候引入swiper,那么这次我就用之前的文档来教你在vue中如何调用swiper. 我们之前看的是swiper教程 那么我根据上面的教程一步一步来教你使用 1.首先创建好swiper组件.写好template 里面的标签内容(当然这里写了个插槽为了以后方便动态插入…

【跨域】一篇文章彻底解决跨域设置cookie问题!

一篇文章彻底解决跨域设置cookie问题! 大家好我是雪人~~⛄ 之前做项目的时候发现后端传过来的 SetCookie 不能正常在浏览器中使用。 是因为谷歌浏览器新版本Chrome 80将Cookie的SameSite属性默认值由None变为Lax。 接下来带大家解决该问题。 原理讲解 我们可以看到…

Java - token的存储与获取

1. 获取token的工具类 问:为什么写工具类呢??? 答:因为我们不知道前端将token怎么存储的,所以我们可以通过调用Token工具类来获取token。Token工具类会检查header、URL中的属性值、以及Cookie等等&#xff…

快速生成Vue2或者vue3模板

1.点击文件,再点击首选项,然后选择用户片段; 2.在弹出来的输入框中,选择第一行vue.json或者第二行新建全局代码片段文件都可,都是为了打开vue.json文件; 3.把下面代码复制到vue.json文件里,然后…

vue3搭建教程(基于vite+create-vue+ element-plus)

前言2021年8月5日&#xff0c;Vue正式发布3.2版本&#xff0c;同时&#xff0c;Vue的作者尤雨溪还在个人微博称&#xff1a;“ < script setup > TS Volar 真香 ”&#xff1b;2022年1月22日&#xff0c;Vue官方宣布Vue3成为了新的默认版本。如今的Vue3已经势不可挡&a…

【JavaScript-进阶】详解数据类型,内存分配,API元素对象获取

目录 前言 1.数据类型 1.简单数据类型和复杂数据类型 2.堆和栈 2.webApi 1.API 2.DOM是啥&#xff1f; 3.如何获取元素&#xff1f; 1.根据ID获取 ​编辑 2.根据标签名获取 3.通过HTML5新增的方法获取 4.特殊元素获取(body,html) 总结 前言 祝大家中秋节快乐…

Vue 实现简单的时间轴 时间进度条

项目需要按天播放地图等值线图功能&#xff0c;所以需要一个时间进度条&#xff0c;网上找了一下发现没有自己需要的样子&#xff0c;于是只能简单的写一个。 1、封装时间尺度组件 <!-- 时间尺度 --> <template><div class"time"><div class&…

vue动态改变元素样式详解

目录1 前言2 动态改变样式的方法2.1 操作元素class列表2.2 操作元素内联样式3 小结1 前言 在vue项目中&#xff0c;很多场景要求我们动态改变元素的样式&#xff0c;比如按钮由不可点击到可以点击样式改变&#xff0c;这种情况下&#xff0c;我们通常根据vue框架提供的动态绑定…

vue3的ref,reactive的使用和原理解析

目录 1.前言 2.比较 3.ref源码解析 4.reactive源码解析 createReactiveObject handles的组成 get陷阱 set陷阱 5.总结 1.前言 vue3新增了ref&#xff0c;reactive两个api用于响应式数据&#xff0c;Ref 系列毫无疑问是使用频率最高的 api 之一,响应式意味着数据变动&…

前端get/post等请求后,一直处于pending状态,解决办法

前端发送完请求发现network里的请求一直处于pending状态&#xff08;如图&#xff09; 或者等待过一段事件后会报错&#xff0c;如图 然后我尝试了一些解决办法&#xff0c;分享给大家&#xff0c;建议大家按照顺序来 1.首先排查是不是后端的问题 这个最重要&#xff0c;不然搞…

Vue3-使用axios发起网络请求

即使是小型项目也会涉及到请求后端API&#xff0c;除非你的网站展示的是一些不需要维护的静态数据&#xff0c;第三篇文章我们来给Vue项目搞上axios。 何为Axios &#xff1f;请看官方对Axios的描述&#xff0c;传送门:官方文档 Axios 是一个基于 promise 网络请求库&#xff0…

vue项目中使用md5加密、crypto-js加密、国密sm3、国密sm4

项目中涉及到一些加密解密的需求&#xff0c;了解并尝试了几种加密解密方法&#xff0c;以下&#xff1a; 方法一&#xff1a;md5加密 注意&#xff1a;md5的特性就是只能加密&#xff0c;所以用md5加密的时候&#xff0c;一定要记住你填写的内容&#xff0c;因为它是无法解密…

Vue el-menu-item实现路由跳转

场景&#xff1a;用了element-ui的el-menu 菜单 怎样实现路由跳转呢&#xff1f; 1&#xff0c;在el-menu加上router&#xff0c;添加el-menu的default-active属性&#xff0c;加&#xff1a;动态绑定&#xff0c;值设置为"this.$router.path" &#xff0c; 2&#x…

解决跨域Access to XMLHttpRequest at ‘http://localhost:8080/xxx’ from origin ‘http://localhost:63342

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题&#xff0c;有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注…

web前端-JavaScript中的forEach和map方法

&#x1f41a;作者简介&#xff1a;苏凉&#xff08;专注于网络爬虫&#xff0c;数据分析&#xff0c;正在学习前端的路上&#xff09; &#x1f433;博客主页&#xff1a;苏凉.py的博客 &#x1f310;系列总专栏&#xff1a;web前端基础教程 &#x1f451;名言警句&#xff1a…

vue项目,如何关闭eslint检测?多种解决办法

新版本vue项目&#xff0c;如何关闭eslint检测一、问题描述二、问题解决1、首先是比较旧的vue项目2、创建项目的时候&#xff0c;不要选eslint3、如果你使用的编辑软件是webstorm4、创建的项目没有webpack.base.conf.js文件&#xff0c;但是有 .eslintrc.js5、比较新的vue项目&…

vue3获取元素并修改元素样式

&#x1f525;&#x1f525;&#x1f525;欢迎关注csdn前端领域博主: 前端小王hs &#x1f525;&#x1f525;&#x1f525;email: 337674757qq.com &#x1f525;&#x1f525;&#x1f525;前端交流群&#xff1a; 598778642 需求&#xff1a;获取元素的样式并且修改元素样式…

猿创征文|我的前端学习之旅【来自一名大四老学长的真情流露】

猿创征文 | 我的前端学习之旅自我介绍我浑噩的大一大二&#xff08;是不是另一个你&#xff09;我的大三生活大三上&#xff08;学习过程、学习方法、推荐网站&#xff09;大三下&#xff08;技术提升、荣誉证书、推荐比赛&#xff09;我与 CSDN 的机缘&#xff08;从小白到创作…

【微信小程序】视图容器和基本内容组件

开发者可以通过运用组件快速搭建出页面结构&#xff0c;上一章也有对组件进行介绍&#xff0c;那么本文牛牛就来带大家学习小程序的组件。 我们可以将组件理解为微信内嵌的标签&#xff0c;它在小程序承担的作用与HTML的标签一致&#xff0c;不过组件的功能更加多样、具体。 事…