Code
写一个函数format,传入一个javascript object,输出格式化后的string,为了简化,我们规定object里只有number、array、object三种类型。比如
//输入 var object = { a: 1, b: 2, c: { d: 3 }, e: [4, 5, { g: 6 }] } //输出 参考 JSON.stringify(object, null, ' ') " { "a": 1, "b": 2, "c": { "d": 3 }, "e": [ 4, …
语法 Promise.all(iterable); 参数:
iterable
一个可迭代对象,如 Array 或 String。
返回值:
如果传入的参数是一个空的可迭代对象,则返回一个已完成(already resolved)状态的 Promise。 如果传入的参数不包含任何 promise,则返回一个异步完成(asynchronously resolved) Promise。注意:Google Chrome 58 在这种情况下返回一个已完成(already resolved)状态的 Promise。 其它情况下返回一个处理中(pending)的Promise。这个返回的 promise 之 …
finally() 方法返回一个Promise。在promise结束时,无论结果是fulfilled或者是rejected,都会执行指定的回调函数。这为在Promise是否成功完成后都需要执行的代码提供了一种方式。
这避免了同样的语句需要在then()和catch()中各写一次的情况。
语法 p.finally(onFinally); p.finally(function() { // 返回状态为(resolved 或 rejected) }); 实现 Promise.prototype._finally = function (callback) { let P = …
语法 Promise.race(iterable); 参数:
iterable
可迭代对象,类似Array。
返回值:
一个待定的 Promise 只要给定的迭代中的一个promise解决或拒绝,就采用第一个promise的值作为它的值,从而异步地解析或拒绝(一旦堆栈为空)。
理解 Promise.race(iterable) 方法返回一个 promise,一旦迭代器中的某个promise解决或拒绝,返回的 promise就会解决或拒绝。
理解1:
var p1 = new Promise((resolve, reject) => { setTimeout(resolve, 500, …
Promise规范 promise 有三个状态:pending,fulfilled,rejected。「规范 Promise/A+ 2.1」 new promise时, 需要传递一个executor()执行器,执行器立即执行; executor接受两个参数,分别是resolve和reject; promise 的默认状态是 pending; promise 有一个value保存成功状态的值,可以是undefined/thenable/promise;「规范 Promise/A+ 1.3」 promise 有一个reason保存失败状态的值;「规范 Promise/A+ 1.5」 promise …
升级版 const PENDING = "pending"; const FULFILLED = "fulfilled"; const REJECTED = "rejected"; function Promise(excutor) { let that = this; // 缓存当前promise实例对象 that.status = PENDING; // 初始状态 that.value = undefined; // fulfilled状态时 返回的信息 that.reason = undefined; // rejected状态时 拒绝的原 …
简洁版 function myPromise(constructor) { let self = this; self.status = "pending"; //定义状态改变前的初始状态 self.value = undefined; //定义状态为resolved的时候的状态 self.reason = undefined; //定义状态为rejected的时候的状态 function resolve(value) { //两个==="pending",保证了状态的改变是不可逆的 if (self.status === "pending") …
代码 // 组件通信,一个触发与监听的过程 class EventEmitter { constructor() { // 存储事件 this.events = this.events || new Map(); } // 监听事件 addListener(type, fn) { if (!this.events.get(type)) { this.events.set(type, fn); } } // 触发事件 emit(type) { let handle = this.events.get(type); handle.apply(this, …
实现myfilter Array.prototype._filter = function (fn) { const result = []; for (let i = 0; i < this.length; i++) { if (fn(this[i], i, this)) { result.push(this[i]); } } return result; }; Test var arr = [4, 5, 6, 7, 9, 10]; var result1 = arr.filter((el) => el > 5); console.log(result1); …
实现 var Jsonp = { loadScript: function(url) { var script = document.createElement("script"); script.type = "text/javascript"; if (script.readyState) { script.onreadystatechange = function() { if (this.readyState == "loaded" || this.readyState == "complete") { …
1/2
Next