设为首页收藏本站 |天气与日历| 2025-04-20 星期日 07:24:00 乙巳(蛇)年 三月廿三 辰时 谷雨
     
切换到窄版

私人站点

 找回密码
 立即注册
搜索
查看: 216|回复: 0

promise

[复制链接]

954

主题

954

帖子

3875

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
3875
发表于 2022-6-1 14:53:36 | 显示全部楼层 |阅读模式
回调地狱:

异步请求套着一个异步请求,一个异步请求依赖于另一个的执行结果,使用回调的方式相互嵌套。
回调地狱代码最显著的特征出现了深V结构代码,如果嵌套过多,
比如需要嵌套100层,代码将变得难以维护
并且代码执行效率低下。
回调地狱.jpg

解决方案
封装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)
})




回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|编程站点 ( 冀ICP备2023028127号-2 )|友链申请|

GMT+8, 2025-4-20 07:24 , Processed in 0.195139 second(s), 153 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表