回调地狱:
异步请求套着一个异步请求,一个异步请求依赖于另一个的执行结果,使用回调的方式相互嵌套。
回调地狱代码最显著的特征出现了深V结构代码,如果嵌套过多,
比如需要嵌套100层,代码将变得难以维护
并且代码执行效率低下。
解决方案:
封装promise,该方法也是Axios异步请求封装的原理
[C++] 纯文本查看 复制代码 var fs = require('fs');
function fun_promise(file_Path) {
//创建promise对象.
//Promise_success为异步成功_调用的回调函数
//Promise_err为异步执行失败_调用的函数
var promise = new Promise(function (Promise_success, Promise_err) {
fs.readFile(file_Path, 'utf8', function (err, file_data) {
//如果文件读取成功,执行Promise_success
if (!err) {
Promise_success(file_data);
}
//如果文件读取失败,执行Promise_success
else {
Promise_err(err);
}
})
});
//返回promise对象
return promise;
}
//得到promise对象
var prom = fun_promise('./a.txt');
//.then 是一个回调函数,实际上就是Promise_success参数
//.then(function(val),val也就是file_data的数据
prom
.then(function (val) {
console.log(val);
//如果需要继续调用
return fun_promise('./b.txt')
})
.then(function (val) {
console.log(val);
//如果需要继续调用
return fun_promise('./c.txt')
})
.then(function (val) {
console.log(val);
})
//异步失败后,输出错误信息
.catch(function(err){
console.log(err)
})
|