15 # promise 延迟对象的作用

上一节我们在实现的 promise 里加了规范测试入口,这个就是 promise 延迟对象

// promise 延迟对象 规范测试入口
KaimoPromise.defer = KaimoPromise.deferred = function () {
    let dfd = {};
    dfd.promise = new KaimoPromise((resolve, reject) => {
        dfd.resolve = resolve;
        dfd.reject = reject;
    });
    return dfd;
};

那么这个东东有什么作用?

我们看个例子:下面的 read 方法里,直接上来就套了一层,能不能解套一层 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);
        }
    );

下面我们用 defer 来改造一下,这样我们就解决了一层嵌套问题

const fs = require("fs");
const KaimoPromise = require("./14/kaimo-promise.js");

function read(filename) {
    let dfd = KaimoPromise.defer();
    fs.readFile(filename, "utf-8", function (err, data) {
        if (err) dfd.reject(err);
        dfd.resolve(data);
    });
    return dfd.promise;
}

read("./file/name.txt")
    .then((data) => {
        return data;
    })
    .then(
        (data) => {
            console.log("success----->", data);
        },
        (err) => {
            console.log("err----->", err);
        }
    );

15 # promise 延迟对象的作用_第1张图片

你可能感兴趣的:(前端工程架构,javascript,promise)