
用ES6的new Promise(function (resolve, reject){})解决回调地狱
b.json
c.json
这里用到了promise对象的.then方法只要是promise就可以一直.then下去
发布日期:2021-05-07 09:27:23
浏览次数:40
分类:精选文章
本文共 1901 字,大约阅读时间需要 6 分钟。
先看看啥子是回调地狱
先建立一个test文件下面有files文件夹和index.js以及files下面有三个问价分别是a.json ,b.json,c.json 如下


a.json


const fs = require('fs')const path = require('path')callBack方式获取一个文件的内容function getFileContent(fileName,callback){ // path.resolve把文件名 拼出来 _dirname是当前目录 const fullFileName=path.resolve(__dirname,'files',fileName) fs.readFile(fullFileName,(err,data)=>{ if(err){ console.error(err) return } callback( // 将字符串的data 以对象的形式返回 JSON.parse(data.toString()) ) })}getFileContent('a.json',aData=>{ console.log('a aData:',aData) getFileContent(aData.next,bData=>{ console.log('b bData:',bData) getFileContent(bData.next,cData=>{ console.log('c cData:',cData) }) })})
上面的getFileContent中的callback就是一个回调函数,下面的调用他时会出现一层一层调用回调函数的情况,如果输出的文件不知这三个甚至更多的话会一直层层嵌套下去
用ES6的new Promise(function (resolve, reject){})解决回调地狱
代码:
function getFileContent(fileName) { const promise = new Promise((resolve, reject) => { const fullFileName = path.resolve(__dirname, 'files', fileName) fs.readFile(fullFileName, (err, data) => { // resolve 和reject都是函数 if (err) { reject(err) return } resolve( // 将字符串的data 以对象的形式返回 JSON.parse(data.toString()) ) }) }) return promise}getFileContent ('a.json').then(aData=>{ console.log('a Data',aData) // 怎么搞定bData,下面return了一个promise对象 所以又可以.then下去 // 所以只要一直返回promise对象就可以一直.then下去 return getFileContent(aData.next)}).then(bData=>{ console.log('b Data',bData) return getFileContent(bData.next)}).then(cData=>{ console.log('c data',cData)})
上面的创建了一个promise的对象 他会以两个函数作为参数分别是reject和resolve如果成功 就是reslove返回失败就reject报错

发表评论
最新留言
哈哈,博客排版真的漂亮呢~
[***.90.31.176]2025年04月15日 22时44分09秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
dojo的发展历史
2021-05-09
Python存储系统(Redis)
2021-05-09
C语言指针收藏
2021-05-09
.net 4种单例模式
2021-05-09
T4 生成数据库实体类
2021-05-09
C#搞个跨平台的桌面NES游戏模拟器
2021-05-09
手把手教你安装Eclipse最新版本的详细教程 (非常详细,非常实用)
2021-05-09
《带你装B,带你飞》pytest成魔之路4 - fixture 之大解剖
2021-05-09
互联网App应用程序测试流程及测试总结
2021-05-09
根据轨迹分析出用户家在哪
2021-05-09
PostgreSQL查询表名称及表结构
2021-05-09
linux中使用awk命令
2021-05-09
LAB2 内核的内存管理
2021-05-09
如何使用google搜索?
2021-05-09
Redis分布式锁的正确实现方式
2021-05-09
设计模式-抽象工厂模式
2021-05-09
MySQL Explain查看执行计划详解
2021-05-09
IntelliJ IDEA 中,项目文件右键菜单没有svn选项解决办法
2021-05-09
Spring 动态绑定多实现类实例综述
2021-05-09
IDEA 调试Java代码的两个技巧
2021-05-09