8 # 链式调用

简介: 8 # 链式调用

链式调用

链式调用可以解决地狱回调问题:

// 地狱回调问题 (err frist 错误第一,异步方法无法通过try catch 捕获异常)
fs.readFile("./file/name.txt", "utf-8", function (err, data) {
    console.log("name.txt--->", err, data);
    if (!err) {
        fs.readFile("./file/age.txt", "utf-8", function (err, data) {
            console.log("age.txt--->", err, data);
        });
    }
});
  1. promise 成功和失败的回调的返回值可以传递到外层的下一个 then
  2. promise 返回值情况
  • 如果返回的是普通的值的话:传递到下一次的成功中(不是错误也不是 promise 就是普通值)
  • 如果返回的是错误的情况:一定会走到下一次的失败中
  • 如果返回的是 promise 的情况:会采用 promise 的状态,决定下一步是走成功还是失败
  1. 错误处理:如果离自己最近的 then 没有错误处理(没有写错误函数)会向下找
  2. 每次执行完 promise.then 方法后返回的都是一个新的 promise (promise 一旦成功或者失败都不能去修改状态)
const fs = require("fs");
function read(filename) {
    return new Promise((resolve, reject) => {
        fs.readFile(filename, "utf-8", function (err, data) {
            if (err) reject(err);
            resolve(data);
        });
    });
}
read("./file/name.txt")
    .then((data) => {
        // return 123;
        return read("./file/age.txt");
        // throw new Error("接口异常");
    })
    .then(
        (data) => {
            console.log("success----->", data);
        },
        (err) => {
            console.log("err----->", err);
        }
    );

目录
相关文章
|
12月前
|
存储 缓存 固态存储
详解电子设备RAM和ROM
详解电子设备RAM和ROM
2085 0
|
运维 Prometheus 监控
构建高效可靠的自动化运维系统
【5月更文挑战第30天】 在信息技术迅猛发展的今天,企业对IT基础设施的依赖性日益增强。为了确保系统的高可用性和最佳性能,越来越多的组织开始转向自动化运维。本文旨在探讨构建一个高效、可靠的自动化运维系统的关键技术和实践策略,通过案例分析和技术比较,提出一种综合解决方案,以期帮助企业实现运维效率的最大化和风险的最小化。
|
SQL 分布式计算 大数据
MaxCompute 重装上阵,Global Zorder
MaxCompute支持Global Zorder,使得整个表或者分区的数据在全局上能按照指定字段进行ZORDER排序,以便数据能有更好的聚集性。
853 0
|
消息中间件 Java Spring
SpringBoot实现RabbitMQ的WorkQueue(SpringAMQP 实现WorkQueue)
SpringBoot实现RabbitMQ的WorkQueue(SpringAMQP 实现WorkQueue)
145 2
|
C语言
C语言好题解析(一)
C语言好题解析(一)
127 1
|
JavaScript
jquery获取被选中的复选框的id串
jquery获取被选中的复选框的id串
301 0
|
Perl 数据安全/隐私保护