Promise

Promise详解-1:初识Promise 不懂Promise?看这篇教程就够了 阅读详情

一,Promise使用方式

Promise是es6中增加的构造函数(类)之一 ,还有proxy , map , get

proxy代理 ?

使用方式

  1. promise 接收一个函数作为参数 , 通常我们会在该函数内发送异步请求
    2.该函数有两个参数 , resolve , reject ,这两个也是函数
    resolve执行时, 会将Promise实例的状态修改为resolved
    reject 执行时, 会将Promise实例的状态修改为rejected
    3.Promise的实例,有then()方法, 该方法可以接收两个函数作为参数,第一个函数表示成功时(resolved)执行的函数,参数是resolve执行时传递的参数,只能传递一个参数

第二个函数表示失败(rejected)时,执行的函数 ,参数是reject执行时传递的参数,也只能传递一个参数 。
4.then方法可以连续打点调用,
当Promise实例为同一个时,第一个then会根据Promise的状态变化而决定执行第一个函数还是第二个函数 , 后续的then只有第一个参数函数生效,第二个写了也没用。

var p = new Promise(function(resolve,reject){
	//发送ajax要卸载这里
	Ajax.get("./php/a.php","",function(data){
		if(!data.error){
			//以前我们把具体的业务逻辑写在回调函数的if语句块中
			//现在我们不写业务逻辑,而是调用resolve 或者 reject
			console.log(data)
			resolve(data.msg);
		}else{
			reject();
		}
	})

});

//p这个对象有个then()方法, 接受两个函数作为参数
p.then(function(msg){
	 console.log("成功")
	 console.log(msg)
},function(){
	console.log("失败")
})

以前我们在回调函数中写业务逻辑, 现在我们在函数中成功了就执行resolve(), 失败了就执行reject(). 然后把具体对应的代码写到 then () 中 。resolve 和 reject 都可以传参数 。

p.then() 调用完了返回的是p对象 ,因此可以继续 .then() 。
这个函数执行完了还是他自己。

二,Promise连续调用

//定义一个promise
p.then(function(msg){
	console.log("成功")
	var p1 = new Promise(function(resolve,reject){
		Ajax.get("php.php","b=2",function(data){
			if(!data.error){
				resolve(data.msg)
			}else{
				reject(data.msg)
			}
		})
	})
	//返回promise实例
	return p1;
},function(){
	console.log("失败")
})

//第二个then监听的就是p1的状态变化

.then(function(data){
	console.log(data)
})
.catch(function(){
// 谁失败处理谁
})

三,Promise的静态方法

之前我们是先发送一个请求,等请求发送回来之后再发送另一个
现在希望同时发送两个请求,等他们都回来之后再做事情

于是 Promise 提供了静态方法 all (构造函数调用的方法叫静态方法)

Promise.all(arr)
该方法接受一个数组为参数, 数组中的每一个成员都是Promise实例。
该方法的作用是 : 同时监听多个promise实例的状态变化,返回值是一个新的promise实例
如果被监听的promise实例中有任何一个失败了, all返回的promise实例的状态变为rejected(失败) , 被监听的promise实例都resolved了, all返回的Promise实例状态变为resolved了 (成功)

Promise.all([])

function sendPromise1(){
	return new Promise(function(resolve,reject){{
		Ajax.get("a.php","",function(data){
			if(!data.error){
				resolve(data.msg)
			}else{
				reject(data.msg)
			}
		})
	})
}

function sendPromise2(){
	return new Promise(function(resolve,reject){{
		Ajax.get("b.php","",function(data){
			if(!data.error){
				resolve(data.msg)
			}else{
				reject(data.msg)
			}
		})
	})
}



let p1 = sendPromise1();
let p2 = sendPromise2();
//以下一条代码的含义是, 让p监听p1 和 p2
let p = Promise.all([p1,p2]);
p.then(function(arr){
//成功时,唯一的参数是数组,数组的每一项是all接收的数组的每一项对应的传递的数据
consolo.log("两个都成功")

})
.catch(msg){
	console.log(msg) //失败时,唯一的参数是失败的第一个reject传递的数据
}

Promise.race

// Promise.race
//该方法接受一个数组作为参数,每一个成员应当是Promise的实例
//该方法的作用,返回一个Promise的实例,该实例的状态跟随数组中第一个发生状态变化的Promise实例
let p = Promise.race([p1,p2])
p.then(function(msg){

})
.catch(function(msg){

})

Promise.resolve

该方法接受3种可能性的参数

  1. 非Promise 比如数字,字符串,布尔值等
  2. Promise实例
  3. thenable对象

返回值是一个Promise实例 如果是非Promise作为参数 ,则Promise实例的状态为resolved ,并且接收到的值是该参数

let p = Promise.resolve(1);
p.then(function(msg){
	console.log(msg) //1
})

如果是Promise实例作为参数 ,则跟随它的状态

let p = Promise.resolve(sendPromise());
p.then(function(data){
	console.log("success",data)
})

.catch(function(msg){
	console.log("failed",msg)
})

如果是thenable 对象

let p = Promise.resolve({
then:function(resolve,reject){
	resolve();
}
})
p.then(function(){
	console.log("成功")
})
.catch(function(){
	console.log("失败")
})

Promise.reject()

返回一个状态为rejected的Promise实例, 参数是什么都可以。参数一般是一个描述失败原因的字符串。

let p = Promise.reject("失败了,也不知道为什么")

p.then(function(){
 // 这个then写不写没有用
})
.catch(function(a){
	console.log(a) //失败了,也不知道为什么
})
promise核心总结 阅读详情

相关推荐

Promise的使用总结

Promise 是 JavaScript 中用于处理异步操作的一种机制。它提供了一种更清晰和更简洁的方式来处理异步代码,避免了回调地狱。以下是 Promise 的使用方法,包括创建 Promise、链式调用、错误处理、并行执行等。

yiguoxiaohai的博客 1762

(基础)Promise中then()方法使用,多次调用、链式调用

Promise可以被多次调用then方法,链式调用

次顶级的博客 1万+

使用基于物质点法(MPM)的Anura3D模拟沙柱坍塌

本博客使用开源软件Anura3D软件模拟了一个沙柱坍塌的过程,这个软件是基于基于物质点法(MPM)设计的

weixin_59902634的博客 4045

Promise 菜鸟教程|new Promise().then() 之间的关系

Promise 菜鸟教程|Promise和then之间的关系peromise 语法1peromise 语法2 peromise 语法1 注意:new Peromise((fun1)=>{})的的fun1带着的参数与 then((data1){}) 中data1对应,按顺序对应 let promise = new Peromise((fun1) =>{ //这里面放入异步请求代码 自己定fun1在什么情况下执行 如下实例代码所示 }); //取用Peromise结果 promise.then(

weixin_46572873的博客 5969

ROS环境下UR机械臂与Realsense相机手眼标定实战指南

本文提供了在ROS环境下,对UR机械臂与Realsense相机进行手眼标定的完整实战指南。详细介绍了从环境搭建、软件包安装、硬件配置到分步数据采集与计算的完整流程,并分享了常见的避坑技巧与精度优化方法,旨在帮助开发者高效、准确地完成标定,为后续的机器人视觉应用奠定坚实基础。

sunny的博客 648

目标检测数据集 第069期-基于yolo标注格式的玻璃清洁状态检测数据集(含免费分享)

但这类技术的落地,离不开大量标注规范、场景丰富的数据集作为算法训练的支撑,玻璃清洁状态检测数据集的出现,正是为了满足这一市场与技术需求。在高校与科研机构的计算机视觉研究中,该数据集可作为基础研究素材,用于探索物体状态识别的算法优化方向,比如针对玻璃这类透明物体的检测算法改进,或是小样本场景下的状态识别研究。通过摄像头采集车窗、挡风玻璃的图像,算法自动检测玻璃清洁度,若识别到脏污影响视线,及时提醒运维人员清洁,避免因玻璃脏污引发的安全事故,提升交通出行的安全性。

深度学习算法工程师,专注于前沿算法研究与实战应用。在这里,我将分享深度学习领域的实战经验、优质数据集资源以及最新论文解读与精度分析,旨在与广大技术爱好者共同探索人工智能的奥秘,助力技术成长与创新。 128

Promise中的then方法详解

Promise详解(第15天) /* * 创建Promise实例的时候得传一个函数 executor,并且这个函数接收两个参数 + resolve函数:将实例的状态从 pending 修改为 fulfilled/resolved,同时将实例的值改为执行这个函数时传递的实参 + reject函数:将实例的状态从 pending 修改为 rejected,同时将实例的值改为执行这个函数时传递的实参 每一个Promise实例都有两个重要的属性: + [[Pro

qq_32021429的博客 5162

Ubuntu零基础教学-史上最详Ubuntu20.04安装教程,超级详细,强烈建议收藏!

官网地址:https://www.vmware.com/ 1、VMware Workstation Pro 15.5.1在Windows 10的安装不再介绍了,一路下一步即可。 2、下面详细介绍在VMware 虚拟机里安装Ubuntu 20.04 LTS的步骤

**My Coding Family** 2万+

Promise中then的执行顺序详解

Promise在前端中主要用于处理异步调用,其基本使用方式通过阮一峰大佬的文档一下就可以入手,但是最近我看了一篇文章wecTeam中,作者深山蚂蚁的《高级进阶:深度揭秘Promise注册微任务和执行过程》一文,让我对Promise的执行顺序有了更深的了解,与此同时我也有了一个疑问,通过这篇文章与大家探讨。 1. promise的异步主要发生在微任务队列中 2. 第一个then的回调监听最新Pr...

qq_37028216的博客 1万+

RK356x U-Boot研究所(命令篇)3.12 mtd命令的用法

RK356x U-Boot研究所(命令篇)3.12 mtd命令的用法

Systemcall名屋 1687

第110章 PCL PointCloudFusing 点云融合重建详细讲解

点云融合是指将多个不同视角、不同位置、不同传感器获取的点云数据进行合并,得到一个更加完整、准确的三维模型。多视角扫描:从多个相机或传感器获取点云数据,需要将这些数据融合成一个统一的三维模型。传感器融合:例如将激光雷达(LiDAR)点云与相机的图像数据融合,以便获得更高质量的三维重建。动态场景重建:动态环境中的物体,点云数据不断更新,如何平滑地融合这些点云是一个重要课题。点云融合的目标是将不同来源的点云数据准确地合并,消除冗余,减少噪声,并提高整体的点云密度和精度。

yumeiguo的博客 503

JavaScript - ES6之Promise(then方法详解)

Promise的出现 Promise是异步操作的一种解决方案,有时候我们使用回调函数异步操作时会层层嵌套,不利于我们修改需求。Promise一般用来解决层层嵌套的回调函数(回调地狱 callback hell)的问题。 Promise的基本用法 第一步:实例化Promise构造函数 const p = new Promise((resolve,reject)=>{}) //Promise解决的不是回调函数,而是回调地狱.resolve和reject是函数,调用它们可以改变Promise的状

visibleforest的博客 9136

5.1 rocr-runtime libhsakmt event 机制全景—从 Doorbell 到 Signal

本文介绍了ROCm/KFD中的Event机制架构,主要解决GPU异步计算中的反馈问题。Event机制分为三层:硬件层触发事件,内核层管理事件通知,用户态接收处理。事件类型分为三大类:同步类事件(如SIGNAL、QUEUE_EVENT)用于任务完成通知,异常类事件(如MEMORY、HW_EXCEPTION)报告错误,拓扑类事件(如NODECHANGE)处理设备变更。该机制通过共享内存和中断实现高效通信,避免CPU轮询开销。后续文章将深入内核实现、Thunk层封装和多队列完成检测实战。

图形/计算GPU的驱动与虚拟化技术分享园地 1307

关于 Promise

如果有任何请求失败,则整体失败。处理方式只返回成功的结果。一旦有任何一个 Promise 被拒绝,整个会立即失败,并返回那个被拒绝的 Promise 的错误。返回值返回一个包含所有成功结果的数组。如果有一个或多个请求失败,则不会返回结果,而是直接进入catch块。使用场景在你只关心所有请求都成功的情况下,适合用于并行处理需要全部成功才能继续的场景。处理方式所有请求都会被处理,不管成功与否,最终返回所有请求的状态和结果。

weixin_58467091的博客 2565

汽车UDS诊断详解及Vector相关工具链使用说明——1.1 应用层协议整体介绍

本文我们先从整体的维度来介绍一下应用层协议,每个UDS服务都遵循本文中的协议。 一、SI(Service ID) SI是UDS指令的第一个字节,我们第一篇文章中提到的10等服务就是指这个服务的SI=0x10,它是服务的标识,每个服务的SI都是唯一的。 ...

weixin_42967006的博客 5475

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

总结Promise特性以及一些关于Promise的api

promise学习笔记

2301_79158740的博客 1250

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

使用 Promise

Promise 是现代 JavaScript 异步编程的基础。它避免了深度嵌套回调,使表达和理解异步操作序列变得更加容易,并且它们还支持一种类似于同步编程中 try…catch 语句的错误处理方式。async 和 await 关键字使得从一系列连续的异步函数调用中建立一个操作变得更加容易,避免了创建显式 Promise 链,并允许你像编写同步代码那样编写异步代码。

歌舞阿瓜的博客 1890

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

promise

Promise 是 JavaScript 中用于处理异步操作的一种对象。它代表了一个尚未完成但承诺会在未来某个时候完成的操作,并允许你在操作完成前注册回调函数。三种状态两个过程状态只能由 Pending --> Fulfilled 或者 Pending --> Rejected,且一但发生改变便不可二次修改三个方法then:注册fulfilled状态回调函数catch:注册rejected状态回调函数finally:注册无论成功或失败都会执行的回调函数。

qq_73270720的博客 1427

Promise.all()与Promise.allSettled()和Promise.race() 有什么区别与联系

Promise.all()与Promise.allSettled()和Promise.race() 有什么区别与联系

嗨,欢迎来到我的 优快云 博客小天地!一名深耕多年的技术发烧友。在这里,我将把日常工作中积累的宝贵经验,从复杂架构设计的精妙之处,到代码优化的实战技巧,毫无保留地分享给大家。 3954

【TypeScript】Promise 深入解析

Promise是 JavaScript 中一种用于处理异步操作的对象。它代表了一个未来才会完成的操作,通常用于网络请求、文件读取等异步操作的结果。PromisePending(待定):操作还未完成。Fulfilled(已完成):操作成功完成。Rejected(已拒绝):操作失败。在Promise完成时,我们可以通过.then()或.catch()方法来处理操作结果或错误。Promise还可以通过async和await语法来简化异步操作的处理。Promise。

lph159的博客 2543

【Promise】promise的理解和使用

文章目录1 什么是Promise1.1 理解1.2 Promise的状态改变1.3 Promise的基本流程1.4 Promise的基本使用2 使用Promise的意义2.1 指定回调函数的方式更加灵活2.2 支持链式调用,可以解决回调地狱问题3 如何使用Promise3.1 API3.2 promise 的几个关键问题3.2.1 如何改变 promise 的状态?3.2.2 一个 promise 指定多个成功 / 失败回调函数,都会调用吗?3.2.3 改变 promise 状态和指定回调函数谁先谁后?3.

weixin_45980065的博客 2117

手写Promise

若要使缺乏完整 promise 实现的浏览器符合规范,或将 promise 添加到其他浏览器和 Node.js 中,请查看。​ 上面提到的库,以及ES6中实现的Promise,还有我们手写的Promise其实都是按照标准进行编写的,那么如何测试是否符合标准呢。无论是早期实现了Promise的第三方库,以及现在的新式浏览器内置的Promise,都是符合。手写Promise-链式编程-fulfilled状态-返回Promise。是社区推出的规范,最早Promise也是社区推出并实现的,旨在规范。

weixin_42782004的博客 1384

Promise详解-2:Promise的进阶使用

不懂Promise的进阶?这篇文章直接教会你

sharkchen的专栏 1428
上一篇: 搜索功能demo
下一篇: jQuery的工具方法
Shirley_0513
博客等级 码龄7年 20粉丝 78原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值