Promise实现原理(Promise/A+规范)

前言 Promise 对象用于表示一个异步操作的最终完成(或失败),及其结果值。它最早由社区提出和实现,其中有多种 Promise 规范。ES6 按照 Promise/A+ 规范将其写进了语言标准。 关于该规范的详情可参考:Promise/A+规范 中文翻译。 基础实现 我们先尝试实现最简单的 Promise 功能:通过 Promise 包装异步请求,并使用then方法注册回调函数,通过resolve方法通知 Promise 异步请求已解决,并执行回调函数。 模拟一个基础的异步 http 请求,并使用 Promise 封装: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 // 模拟http请求 const mockAjax = (url, s, callback) => { console.log("[mockAjax] start"); setTimeout(() => { console.log("[mockAjax] callback"); callback("异步结果:" + url + "异步请求耗时" + s + "秒"); }, 1000 * s); }; // Promise基础功能 new Promise((resolve) => { mockAjax("getUserId", 1, function (result) { resolve(result); }); }) ....

2020年11月27日 · ruihusky

JavaScript原型与继承

构造函数模式与原型 在 ES5 中,我们可以自定义构造函数用于创建特定的类型对象,例如: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 // 定义构造函数 function Person(name, age, job) { this.name = name; this.age = age; this.job = job; this.sayName = function () { console.log(this.name); }; } // 以 new 操作符调用构造函数 let person1 = new Person("Nicholas", 29, "Software Engineer"); let person2 = new Person("Greg", 27, "Doctor"); person1.sayName(); // Nicholas person2.sayName(); // Greg 其实这里的“构造函数”说法只是一种概念上的区分,它与普通的 JavaScript 函数没什么区别。通常会约定构造函数以大写字母开头,非构造函数以小写字母开头。...

2020年11月12日 · ruihusky