IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> Node.js之Promise认识 -> 正文阅读

[JavaScript知识库]Node.js之Promise认识

promise是node.js的对象,它是一个构造函数,作用是将异步操作以同步操作的流程表达出来。解决Node.js异步编程中回调地狱的问题。

语法:

const?fs?=?require('fs');

//通过promise?能把?异步API的执行?和?正确/错误的处理?进行了分离?这样就能够解决回调地狱的问题

//resolve和reject实际上就是两个函数;如果下面异步API执行成功了就调用resolve,如果失败了就调用reject

//通过resolve和reject就可以把err和result的值拿到promise的外面

let?promise?=?new?Promise((resolve,?reject)?=>?{

????fs.readFile('./1.txt',?'utf8',?(err,?result)?=>?{

????????if?(err?!=?null)?{

????????????reject(err);

????????}?else?{

????????????resolve(result);

????????}

????});

});

//then下面的回调函数相当于调用了上面的resolve()函数;把上面的result实参传递给这里回调函数的形参

//catch下面的回调函数相当于调用了上面的reject()函数;把上面的err实参传递给这里回调函数的形参

promise.then((result)?=>?{

????????console.log(result);

????})

????.catch((err)?=>?{

????????console.log(err);

????})

案例:

//需求:依次读取1.txt、2.txt、3.txt三个文件

const?fs?=?require('fs');

//回调地狱代码(异步API嵌套问题)

//?fs.readFile('./1.txt',?'utf8',?(err,?result1)?=>?{

//?????console.log(result1);

//?????fs.readFile('./2.txt',?'utf8',?(err,?result2)?=>?{

//?????????console.log(result2);

//?????????fs.readFile('./3.txt',?'utf8',?(err,?result3)?=>?{

//?????????????console.log(result3);

//?????????});

//?????});

//?});

//下面是利用promise改造回调地狱的代码?解决了异步API嵌套的问题

//1.依次读取3个文件,也就是要调用三次fs.readFile(),由于fs.readFile()是异步API,所以我们可以用promise包装它

//2.为了控制API在适当的时机被执行,又在promise外面包裹一个函数?当函数被调用时return的就是这个promise对象

function?p1()?{

????return?new?Promise((resolve,?reject)?=>?{

????????fs.readFile('./1.txt',?'utf8',?(err,?result)?=>?{

????????????resolve(result)

????????})

????})

}

function?p2()?{

????return?new?Promise((resolve,?reject)?=>?{

????????fs.readFile('./2.txt',?'utf8',?(err,?result)?=>?{

????????????resolve(result)

????????})

????})

}

function?p3()?{

????return?new?Promise((resolve,?reject)?=>?{

????????fs.readFile('./3.txt',?'utf8',?(err,?result)?=>?{

????????????resolve(result)

????????})

????})

}

//3.由于promise给我们提供了链式编程的写法,如果想要在第二个then拿到r2的结果,只需在前面一个then?返回p2()的promise对象即可

p1().then((r1)?=>?{

????????console.log(r1);

????????return?p2();

????})

????.then((r2)?=>?{

????????console.log(r2);

????????return?p3();

????})

????.then((r3)?=>?{

????????console.log(r3);

????})

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-08-09 10:09:16  更:2021-08-09 10:09:22 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/19 9:42:09-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码