promise 英文意思是 诺言; 许诺; 承诺; 获得成功的迹象; 吉兆; 迹象;

用法如字面意思,是一种可能未发生的许诺

js中的代码存在异步执行,一般通过回调函数返回结果,如ajax调用后会在回调函数中获取返回值,但是js代码没有等待返回值而继续向下执行了。现实中程序代码是实现有先后顺序的业务逻辑的,为了让异步代码按照指定的顺序执行,这里使用Promise完成

  1. Promise对象执行then方法会继续返回Promise对象,因此可以一直顺序调用下去如:p.then().then().then()...... 且他们不同代码块中的执行是从前到后同步执行的

  2. 把异步代码写在Promise函数内部,通过Promise中的resolve函数触发,让代码执行接下来的then语句。resolve函数理解为传递参数执行下一个then模块中的代码。

  3. Promise中的resolve方法不执行then函数中的语句就不会执行,这样让异步的代码实现了同步。

以下在typescript语言环境下演示:

//建立一个Promise
let p:Promise<string> = new Promise<string>((resolve, reject)=>{console.log('Promise 被执行...');let err:boolean = false;if(!err){console.log('没有报错...');resolve('没有报错');}else{console.log('发生了错误...');reject('发生了错误')}
});

先看then方法

//在vscode编辑器中鼠标移动到方法上会有then方法提示:/*************************************************************/(method) Promise<string>.then<string, never>(onfulfilled?: ((value: string) => string | PromiseLike<string>) | null | undefined, onrejected?: ((reason: any) => PromiseLike<never>) | null | undefined): Promise<...>
Attaches callbacks for the resolution and/or rejection of the Promise.@param onfulfilled — The callback to execute when the Promise is resolved.@param onrejected — The callback to execute when the Promise is rejected.@returns — A Promise for the completion of which ever callback is executed./*************************************************************///首先看then方法的返回值: Promise<...>,也是一个Promise对象
//then的参数可以是两个:onfulfilled?,onrejected? 可以传递,也不可不传递//onfulfilled的类型:
//    1.(value: string) => string | PromiseLike<string>) 可以是带有一个参数的函数,返回值可以是string(与new Promise时候规定的范型一致)或者PromiseLike(理解为Promise即可)
//    2.null
//    3.undefined//onrejected的类型:
//    1.(reason: any) => PromiseLike<never> 可以是带有一个参数的函数,返回值可以是PromiseLike(理解为Promise即可)
//    2.null
//    3.undefined//onfulfilled 回调函数是在Promise中resolved方法执行时被调用的
//onrejected 回调函数是在Promise中onrejected方法执行时被调用的

//同一Promise对象执行resolve传递参数后,参数不会再次改变

//当先执行resolve后执行then函数时,传递的参数会保存在对象内部

//当先执行then函数后执行resolve函数时,then函数中的回调函数会阻塞等待resolve的执行

看例子:

//建立一个Promise
let p:Promise<string> = new Promise<string>((resolve, reject)=>{console.log('-----------Promise执行-------------');//实例化对象时候执行setTimeout(()=>{console.log('-----------Promise resolve执行-------------');//同一Promise对象执行resolve传递参数后,参数不会再次改变//当先执行resolve后执行then函数时,传递的参数会保存在对象内部//当先执行then函数后执行resolve函数时,then函数中的回调函数会阻塞等待resolve的执行resolve('resolve执行'); },1500);
});console.log('------------------------');setTimeout(()=>{p.then(value=>{console.log('------------我执行了1------------');console.log(`value=${value}`);console.log('------------我执行了1------------');});
},2000);console.log('------------分割线------------');setTimeout(()=>{p.then(value=>{console.log('------------我执行了2------------');console.log(`value=${value}`);console.log('------------我执行了2------------');});
},1000);

代码执行结果:


-----------Promise执行-------------
index.ts:3
------------------------
index.ts:11
------------分割线------------
index.ts:21
-----------Promise resolve执行-------------
index.ts:5
------------我执行了2------------
index.ts:25
value=resolve执行
index.ts:26
------------我执行了2------------
index.ts:27
------------我执行了1------------
index.ts:15
value=resolve执行
index.ts:16
------------我执行了1------------

nodejs中Promise使用相关推荐

  1. nodejs中使用worker_threads来创建新的线程

    文章目录 简介 worker_threads isMainThread MessageChannel parentPort和MessagePort markAsUntransferable SHARE ...

  2. nodejs中的文件系统

    文章目录 简介 nodejs中的文件系统模块 Promise版本的fs 文件描述符 fs.stat文件状态信息 fs的文件读写 fs的文件夹操作 path操作 简介 nodejs使用了异步IO来提升服 ...

  3. 深入理解nodejs中的异步编程

    文章目录 简介 同步异步和阻塞非阻塞 javascript中的回调 回调函数的错误处理 回调地狱 ES6中的Promise 什么是Promise Promise的特点 Promise的优点 Promi ...

  4. ES Module 和 CommonJS 学习笔记(二) —— NodeJS 中使用 ESM 和 CJS

    在 NodeJS 中使用 ES6 模块 当前较新版本的 NodeJS 支持 ESM 和 CJS ,但默认使用的是 CJS 规范去解析 JS 代码,直接使用 CJS 是没有任何问题的,而使用 ESM 需 ...

  5. linux c++ 等待函数,JavaScript在nodejs中实现sleep休眠函数wait等待的方法

    参考文档: JavaScript在nodejs中实现sleep休眠函数wait等待的方法: https://www.bas369.com/more/l... js的休眠实现---sleep(): ht ...

  6. GridFS在nodejs中的应用

    问题的产生: 众所周知,在mongodb中单个文档的大小默认限制为16M,如果要存储的数据超过这个限制那么程序就会抛出异常,当然你可以通过修改数据库的限制将16M提高到32M甚至更大,但是这会有两个问 ...

  7. nodejs+html转换pdf,Nodejs中使用phantom将html转为pdf或图片格式的方法

    最近在项目中遇到需要把html页面转换为pdf的需求,并且转换成的pdf文件要保留原有html的样式和图片.也就是说,html页面的图片.表格.样式等都需要完整的保存下来. 最初找到三种方法来实现这个 ...

  8. nodeJS中读写文件方法的区别

    导言:nodejs中所有与文件相关的操作都在fs模块中,而读写操作又是我们会经常用到的操作,nodejs的fs模块针对读操作为我们提供了readFile,read, createReadStream三 ...

  9. nodejs+html转换pdf,Nodejs中使用phantom将html转为pdf或图片格式的方法.pdf

    Nodejs中中使使用用phantom将将html转转为为pdf或或图图片片格格式式的的方方法法 最近在项目中遇到需要把html页面转换为pdf 的需求,并且转换 的pdf文件要保留原有html的样式 ...

最新文章

  1. leetcode-142 环形链表II
  2. IOS开发笔记9-C语言基础复习
  3. 论信息系统的项目范围管理
  4. 医学院计算机社发展,医学院计算机教学创新思路.docx
  5. i.MX 系列CPU HAB漏洞SecureBoot漏洞
  6. 从JDBC到数据库连接池
  7. Vicor再携创新产品“登陆”ODCC大会,有详情!
  8. gtp文件服务器,GTP中文网吉它谱吉他谱guitar网站
  9. bash中的算术运算
  10. QGroundControl源码编译安装
  11. svn sync主从同步学习
  12. C语言 打印九九口诀表
  13. C++11:lambda表达式详细介绍
  14. 2021年天猫淘宝双12,京东双十二活动时间以及玩法介绍
  15. 如何用计算机求矩阵的逆矩阵,逆矩阵的求法
  16. 计算机图片怎么截图快捷键,电脑截图快捷键四种截屏方式,笔记本电脑如何截屏截图?...
  17. 段式液晶程序设计技巧
  18. 【valist】c语言可变参数宏
  19. cs231n:assignment2——Q4: ConvNet on CIFAR-10
  20. delphi源码 中间件 框架【网盘映射】

热门文章

  1. Selenium爬虫实践:ajax请求抓包、浏览器退出
  2. CentOS8安装Geant4笔记(一):Geant4介绍、编译和安装
  3. top: failed tty get
  4. m=1,n=2;不符合C语言的赋值语句,矿大 C语言程序设计期末考试试题(含答案)
  5. 4. 去掉a标签的下划线
  6. nginx php 404 not found,解决项目中出现的404 Not Found nginx/1.15.0
  7. C语言实现结构体输入学号姓名成绩并按照成绩高低排序输出
  8. 固定资产变动,查询找不到相应卡片
  9. Cocos Creator 3.2 本地调试正常 放入域名下运行或者在4399上跑 加载cconb文件报错
  10. 微软海底服务器外壳材料,你知道么?微软把数据中心扔海底了!