*/(functionname(window) {// 定义promise中的三种状态constSTATUS_PENDING='pending'constSTATUS_FULFILLED='fulfilled'constSTATUS_REJECTED='rejected'functionPromise(excutor) {// excutor带参,同步执行resolve和reject方法,出错就用reject抛出异常// 初始化该class中的初始状态this.status=STATUS_PENDING// 定义class...
// 拿到上一个promise成功回调执行的结果 let result = onResolved(this.value); // console.log("result", result); // 判断执行的结果是否是一个promise对象 if (result instanceof MyPromise) { result.then(nextResolve, nextReject); } else { // 将上一个promise成功回调执行的结果传递给下一个promis...
当 Promise 的状态为 Fulfilled 时,我们使用 setTimeout 函数将 onFulfilled 回调函数放入微任务队列中,以确保在本轮事件循环结束后执行。同样的,当 Promise 的状态为 Rejected 时,我们使用 setTimeout 函数将 onRejected 回调函数放入微任务队列中。 当Promise 的状态为 Pending 时,我们将 onFulfilled 和 onRejected 回...
最后,我们来完成上面的 resolvePromise 函数,我们暂且将第一个 then 返回的值成为 x,在这个函数中,我们需要去判断 x 是不是 promise(这里是重点!): 是:则取他的结果,作为新的 promise2 成功的结果 不是:直接作为新的 promise2 成功的结果 resolvePromise 代码如下: /** * 处理promise递归的函数 * * promis...
resolve 用于创建一个已成功的 MyPromise实例 reject 用于创建一个已失败的 MyPromise实例 三、MyPromise.prototype.then 用于注册成功的回调函数 实现链式调用 ,并将每次回调结果传递到下一个 then 方法中 四、MyPromise.prototype.catch 用于注册失败的回调函数 实现链式调用,跨对象的 catch捕捉流程 , 以及链式调...
ES6无异于是当前前端必备的一项技能,而Promise又是ES6里面的重中之重,Promise充斥在我们代码的每一个角落。一、Promise是什么?promise是一种异步编程解决方案,主要解决了:当有先后依赖的多个异步任务时,层层嵌套的回调写法不灵活、容易滋生bug、且难以维护的问题。目前我们使用的 Promise 是基于 Promise A+ 规范实现...
首先我们要知道Promise的几个特性: ☐ 一个Promise对象有三种状态:pending、fullfilld、rejected ☐ Promise对象状态一旦被改变,就不允许再被改变了 ☐ new Promise构造函数接收一个函数作为参数,该函数又有两个参数:resovle和reject,resovle和reject也都是函数 ...
1. 实现Promise.all 实现思路 promise.all(iterable)返回一个新的promise实例。此实例在iterable参数内所有的promise都fulfilled或者参数中不包含promise时,状态才变成fulfilled;如果参数中有一个失败rejected,此实例回调失败,失败的信息是第一个失败promise的返回结果。 所以总结promise.all的特点,即为:...Promise...
Promise 主要功能 Promise 出现的最大的意义是解决了回调地狱,而Promise 最终会返回一个新的 promise 对象, 所以接下来继续思考: 如何编写调用.then() 链式调用函数来解决回调地狱的问题? 并且如何等待第一个.then()函数状态值改变后,再执行第二个.then()? 如何调用 Promise 会返回一个新的 promise 对象? 先来...
对于前端新手而言,Promise是一件比较困扰学习的事情,需要理解的细节比较多。对于前端面试而言,Promise是面试官最常问的问题,特别是手撕源码。众所周知,JavaScript语言执行环境是“单线程”。 单线程,就是指一次只能完成一件任务,如果有多个任务就必须排队等候,前面一个任务完成,再执行后面一个任务。这种“单线程”模式...