上一节我们在实现的 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); } );