const fs = require('fs')

function getFileByPath(fpath) {

return new Promise(function (resolve, reject) {

fs.readFile(fpath, 'utf-8', (err, dataStr) => {

if (err) return reject(err)

resolve(dataStr)

})

})

}

// 先读取文件1,在读取2,最后读取3

// 注意: 通过 .then 指定 回调函数的时候,成功的 回调函数,必须传,但是,失败的回调,可以省略不传

// 这是一个 错误的示范,千万不要这么用; 硬是把 法拉利,开成了 拖拉机;

/* getFileByPath('./files/1.txt')

.then(function (data) {

console.log(data)

getFileByPath('./files/2.txt')

.then(function (data) {

console.log(data)

getFileByPath('./files/3.txt')

.then(function (data) {

console.log(data)

})

})

}) */

// 读取文件1

// 在上一个 .then 中,返回一个新的 promise 实例,可以继续用下一个 .then 来处理

// 如果 ,前面的 Promise 执行失败,我们不想让后续的Promise 操作被终止,可以为 每个 promise 指定 失败的回调

/* getFileByPath('./files/11.txt')

.then(function (data) {

console.log(data)

// 读取文件2

return getFileByPath('./files/2.txt')

}, function (err) {

console.log('这是失败的结果:' + err.message)

// return 一个 新的 Promise

return getFileByPath('./files/2.txt')

})

.then(function (data) {

console.log(data)

return getFileByPath('./files/3.txt')

})

.then(function (data) {

console.log(data)

}).then(function (data) {

console.log(data)

}) */

// console.log('OKOKOK')

// 当 我们有这样的需求: 哪怕前面的 Promise 执行失败了,但是,不要影响后续 promise 的正常执行,此时,我们可以单独为 每个 promise,通过 .then 指定一下失败的回调;

// 有时候,我们有这样的需求,个上面的需求刚好相反:如果 后续的Promise 执行,依赖于 前面 Promise 执行的结果,如果前面的失败了,则后面的就没有继续执行下去的意义了,此时,我们想要实现,一旦有报错,则立即终止所有 Promise的执行;

getFileByPath('./files/1.txt')

.then(function (data) {

console.log(data)

// 读取文件2

return getFileByPath('./files/22.txt')

})

.then(function (data) {

console.log(data)

return getFileByPath('./files/3.txt')

})

.then(function (data) {

console.log(data)

})

.catch(function (err) { // catch 的作用: 如果前面有任何的 Promise 执行失败,则立即终止所有 promise 的执行,并 马上进入 catch 去处理 Promise中 抛出的异常;

console.log('这是自己的处理方式:' + err.message)

})

使用promise解决回调地狱_使用Promise 解决回调地狱相关推荐

  1. mysql回调地狱_浅谈JS回调地狱

    前言: 回调地狱称之为callback hell 主体: (1)分析 由图分析可知,内部的异步请求依赖于上一个内部请求的结果 (2)编写案例 本节内容主要涉及 异步编程 1.简单回调案例 2.node ...

  2. java 回调模式_总结!!!总结!!!java回调以及future模式

    总是忘记,我这里直接写实际的东西,看其他的博客都是类图,文字描述,这里直接用代码描述. 疑问:什么是回调 回调,回调.要先有调用,才有调用者和被调用者之间的回调.所以在百度百科中是这样的: 软件模块之 ...

  3. Java回调网址_极光短信- 回调接口 - 极光文档

    回调接口 设置并校验回调地址: 回调消息格式说明: 测试回调功能的方法: 设置回调地址 功能说明 设置并校验回调地址 操作路径 Step1:登入控制台 Step2:进入应用模版 Step3:右侧菜单中 ...

  4. java中钩子函数回调函数_钩子函数和回调函数

    一般认为,钩子函数就是回调函数的一种,其实还是有差异的,差异地方就是:触发的时机不同. 先说钩子函数: 钩子(Hook)概念源于Windows的消息处理机制,通过设置钩子,应用程序对所有消息事件进行拦 ...

  5. 异步回调地狱_如何逃避异步/等待地狱

    异步回调地狱 async/await freed us from callback hell, but people have started abusing it - leading to the ...

  6. 机器学习解决什么问题_机器学习帮助解决水危机

    机器学习解决什么问题 According to Water.org and Lifewater International, out of 57 million people in Tanzania, ...

  7. java中钩子函数回调函数_钩子函数 和回调函数

    标签: http://blog.csdn.net/lipeionline/article/details/6369657  转自 也可以这样,更容易理解:回调函数就好像是一个中断处理函数,系统在符合你 ...

  8. java解决线程死锁_为你解决Java线程死锁

    产生死锁的原因: 1. 系统资源不足.分配不当.系统中都会有一种不可剥夺的资源,若是这些资源不能够满足进程运行的需要,那么就只能进行资源争夺,从而陷入死锁. 注意:只有对不可剥夺资源的竞争才可能产生死 ...

  9. Promise使用,return的运用,解决回调地狱

    Promise使用,return的运用,解决回调地狱 回调地狱 httpBookModel.getHotList().then((res) => {console.log(res)httpBoo ...

最新文章

  1. 采用JNI方法利用opengl es 1.x在android上绘图
  2. xcode代码没颜色的解决方案
  3. 高德地图JavaScript API开发研究
  4. scrapy爬取动态网页_scrapy_splash 设置随机请求头
  5. [译]不要在UI主线程中进行耗时的操作
  6. Python操作MySQL的封装类
  7. 隐藏文件或文件夹属性无法修改解决方案
  8. 怎样在vrep child scirpt里定义自己写的函数
  9. 通过mapreduce把mysql的数据读取到hdfs
  10. HTML5基础知识习题 一
  11. word应用2(实用)
  12. libjpeg、libpng使用方法
  13. 图像辨识系统神经网络图,图像识别技术神经网络
  14. 直线方程和直线系方程
  15. 会员等级图标js脚本
  16. 简单说 通过CSS的滤镜 实现 火焰效果
  17. 提高网站转化率——页面停留时间与网站停留时间
  18. fstream用法总结 C++
  19. Android的识花软件推荐,形色、苗叔、花伴侣三大主流识花软件全面评测
  20. SAP中质量订单未维护结算规则导致月结报错的分析解决案例

热门文章

  1. java编写创建数据库和表的程序
  2. 难道我的事,又要落空么。。。
  3. C/C++隐式类型转换导致的若干问题
  4. svn里ignore不需要提交的用户文档
  5. 超级usb万能启动盘
  6. Android 禁止更换桌面,Android中如何禁用其他应用,并且不在桌面显示
  7. 腐蚀rust研究台抽奖_延迟焦化装置的腐蚀风险分析
  8. 怎样对流媒体进行压力测试_暖气片怎样安装效果好?暖气片正确的安装,采暖效果更好!...
  9. java中方法不调用会执行_java[新手]类里的方法没有调用为什么实现了?
  10. angularjs全栈开发知乎_为什么你要去尝试全栈开发?