首页 > 其他 > 详细

回调地狱,Promise解决回调地狱

时间:2019-11-30 16:40:28      阅读:69      评论:0      收藏:0      [点我收藏+]
1、npm init -y
2、npm install Promise
3、readFile是异步函数,因此执行读取a.txt、b.txt、c.txt三个文件顺序不确定
4、如果想要按照先读取a文件,再读取b文件,再读取c文件顺序
5、需要层层嵌套,出现回调地狱,也可以使用Promise解决回调地狱
var fs = require(‘fs‘);

var p1 = new Promise(function (resolve,reject) {
fs.readFile(‘./a.txt‘,‘utf8‘,function (err,data) {
if(err){
reject(err)
}
resolve(data)
})
});

var p2 = new Promise(function (resolve,reject) {
fs.readFile(‘./b.txt‘,‘utf8‘,function (err,data) {
if(err){
reject(err)
}
resolve(data)
})
});

var p3 = new Promise(function (resolve,reject) {
fs.readFile(‘./c.txt‘,‘utf8‘,function (err,data) {
if(err){
reject(err)
}
resolve(data)
})
});

p1
.then(function (data) {
console.log(data); //p1的data
return p2;
},function (err) { //p1的err
console.log(‘读取文件失败了...‘,err)
})
.then(function (data) {
console.log(data); //p2的data
return p3;
},function (err) {
console.log(err) //p2的err
})
.then(function (data) {
console.log(data); //p3的data
},function (err) {
console.log(err) //p3的err
});


封装
var fs = require(‘fs‘);

function pReadFile(dbPath) {
return new Promise(function (resolve,reject) {
fs.readFile(dbPath,‘utf8‘,function (err,data) {
if(err){
reject(err)
}else{
resolve(data)
}
})
})
}

pReadFile(‘./a.txt‘)
.then(function (data) {
console.log(data);
return pReadFile(‘./b.txt‘)
})
.then(function (data) {
console.log(data);
return pReadFile(‘./c.txt‘)
})
.then(function (data) {
console.log(data)
});

回调地狱,Promise解决回调地狱

原文:https://www.cnblogs.com/xushan03/p/11962574.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!