首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

web前端面试题:您能读懂的Promise源码实现(手写代码)

2、让then函数直接返回Promise 3、更改promise的状态:异常执行reject,其它均执行resolve •验证参数是否为函数: // 防止使用者成功失败函数,所以成功失败都给了默认函数...= function (onResolved, onRejected) { return new Promise((resolve, reject) => { // 防止使用者成功失败函数...= function (onResolved, onRejected) { return new Promise((resolve, reject) => { // 防止使用者成功失败函数...= function (onResolved, onRejected) { return new Promise((resolve, reject) => { // 防止使用者成功失败函数...// 出现异常,执行reject reject(err); } } // 防止使用者成功失败函数

84320
您找到你想要的搜索结果了吗?
是的
没有找到

手动实现PromiseA+

reject 失败函数 reject(error); } } // then 方法接收两个函数,一个是成功,一个是失败 then...为了解决这个问题,我们可以使用两个数组,分别用来存储失败成功,当 status 变化时,value reason 也会跟着变化(这两个变量都在 resolve reject 函数中改变)...then 方法返回的值有三种: 在成功或者失败中抛出异常,会走到下一次 then 的失败里; 成功失败返回的是还是一个 promise,那么会用这个 (返回的)promise 的状态作为结果...如果在失败中返回的是一个普通值,该值会传入下一个 then 方法的成功里。...比如上面的代码,失败中返回普通值,结果值会传递到下一个成功里,而不是失败里,如果 then 方法返回的是当前实例,状态已经是失败态,状态不可逆转,也就不能把失败态变成成功态。

47110

javascript异步与promise

,就要考虑一些不可控因素 调用回调过早 调用回调过晚(不被调用调用次数过多或者过少 promise的存在就是为了解决以上问题 虽然我们日常写回函数不会有这么严格的要求,但是如果这样去写回函数...:pending(进行中)、fulfilled(已成功)和rejected(已失败)(一旦状态改变,就不会再变) 函数调用过早 调用过早就是将异步函数作为同步处理了, 我们之前说过,javascript...函数调用过晚不被调用 函数调用过晚 函数调用过晚的处理原理和调用过早很类似, 在promise的then()中存放着异步函数,所有的异步都存在于js的任务队列中,当js的主线程执行完毕后...s => console.log(s)); console.log('我在主线程'); 失败状态的输出 //我在主线程 //失败失败状态下回调用 所以说,不管是失败还是成功函数都会被调用...//我在主线程 //我是异步执行的失败:失败啦 当状态变为失败时,就不会再变为成功成功的函数也不会执行,反之亦然 调用次数过少 函数正常是调用一次,过少=>0次=>函数不被调用,上面刚刚讨论过

88840

JS中Promise理解与应用

意指我答应你我会去做的,不管成功还是失败我肯定会做的。 1、基础介绍 Promise是ES6一个新的特性,本身是个对象用于表示一个异步操作的最终完成 (失败), 及其结果值。...执行结果要么成功、要么失败: 如果执行完成调用resolve ,promise1状态变为fulfilled 。 如果失败调用reject,promise1状态变为rejected 。...当成功时执行第一个参数onFulfilled的调处理,失败执行第二个参数onRejected的调处理,然后返回一个 新的Promise对象,然后可以继续添加then方法处理,以此可形成链式调用。...方法返回一个新的 Promise 实例,此实例在 iterable 参数内所有的 promise 都“完成(resolved)”参数中包含 promise 时完成(resolve);如果参数中...此类似于操作,只要有一个完成失败就算结束。任意一个子promise执行成功失败后就会生成一个新的promise,状态就是第一个promise的状态。

1.2K20

uni-app入门教程(5)接口的基本使用

如需直接开相机直接选相册,请只使用一个选项 success Function 是 成功则返回图片的本地文件路径列表 tempFilePaths fail Function 否 接口调用失败函数...fail Function 否 接口调用失败函数 complete Function 否 接口调用结束的函数(调用成功失败都会执行) index.vue如下: <...fail Function 否 接口调用失败函数 complete Function 否 接口调用结束的函数(调用成功失败都会执行) index.vue如下: <...fail Function 否 接口调用失败函数 complete Function 否 接口调用结束的函数(调用成功失败都会执行) index.vue如下: <...fail Function 否 接口调用失败函数 complete Function 否 接口调用结束的函数(调用成功失败都会执行) index.vue如下: <

2.6K30

JS原生引用类型解析7-Promise类型

简介 ES6引入了一个全新的对象Promise,用于表示一个异步操作的最终状态(完成失败),以及其返回的值。Promise最直接的好处就是链式调用,另外在错误捕获上也很方便。...这个新的promise对象在触发成功状态以后,会把一个包含iterable里所有promise返回值的数组作为成功的返回值,顺序跟iterable的顺序保持一致;如果这个新的promise对象触发了失败状态...Promise.race(iterable) 当iterable参数里的任意一个子promise被成功失败后,父promise马上也会用子promise的成功返回值失败详情作为参数调用父promise...如果调用 then 的 Promise 的状态(fulfillment rejection)发生改变,但是 then 中并没有关于这种状态的函数,那么 then 将创建一个没有经过函数处理的新...由于无法知道promise的最终状态,所以finally的函数中接收任何参数,它仅用于无论最终结果如何都要执行的情况。

1.3K10

JavaScript 标准内置对象Promise使用学习总结

,即抛出异常,该异常值 exception将被传递给promiseObj.then函数参数列表中第二个参数--一个函数 resolve("执行成功"); // 如果resolve函数被调用...,该异常值 exception将被传递给promiseObj.then函数参数列表中第二个参数--一个函数 reject("执行失败"); // 如果reject函数被调用,其函数实参将被传递给...对象定义的匿名函数(假设为func1)执行成功和执行失败时被调用(func1函数中,resolve被调用表示匿名函数执行成功,reject被调用、或者函数于resolve,reject被执行前,抛出了异常...Promise.all Promise.all(iterable) 方法返回一个 Promise 实例,此实例在 iterable 参数内所有的 promise 都“完成(resolved)”参数中包含...promise 时完成(resolve);如果参数中 promise 有一个失败(rejected),此实例失败(reject),失败原因的是第一个失败 promise 的结果 例: function

69310

Promise对象

resolve和reject函数被调用时,分别将promise的状态改为完成fulfilled失败rejected。...缺点:无法取消Promise,一旦新建它就会立即执行,无法中途取消;如果设置函数,Promise内部抛出的错误,不会反应到外部;当处于pending状态时,无法得知目前进展到哪一个阶段(刚刚开始还是即将完成...这个新的promise对象在触发成功状态以后,会把一个包含iterable里所有promise返回值的数组作为成功的返回值,顺序跟iterable的顺序保持一致;如果这个新的promise对象触发了失败状态...// fail }) Promise.race(iterable) 当iterable参数里的任意一个子promise被成功失败后,父promise马上也会用子promise的成功返回值失败详情作为参数调用父...会在当前promise运行完毕后被调用,无论当前promise的状态是完成fulfilled还是失败rejected。

54710

前端系列 | 如何更好的理解Promise对象

Promise 对象代表一个异步操作,有三种状态: pending: 初始状态,不是成功失败状态。 fulfilled: 意味着操作成功完成。 rejected: 意味着操作失败。...其次,如果设置函数,Promise内部抛出的错误,不会反应到外部。第三,当处于pending状态时,无法得知目前进展到哪一个阶段(刚刚开始还是即将完成) 为什么需要Promise ?...地狱 回掉函数中嵌套,Promise解决了地狱。...fulfilled时执行 console.log("成功") },()=>{ // 当Promise的状态时rejected时, 执行 console.log("失败调用") })...)=>{ //当Promise的状态使fulfilled时执行 console.log("成功",value) },(err)=>{ // 当Promise的状态时rejected时,

39910

微信小程序权限接口

否 接口调用失败函数 complete function 否 接口调用结束的函数(调用成功失败都会执行)   官网的示例代码: // 可以通过 wx.getSetting 先查询一下用户是否授权了...2.10.1 success function 否 接口调用成功函数 fail function 否 接口调用失败函数 complete function 否 接口调用结束的函数...(调用成功失败都会执行) object.success函数如下: 属性 类型 说明 最低版本 authSetting AuthSetting 用户授权结果 subscriptionsSetting...2.10.3 success function 否 接口调用成功函数 fail function 否 接口调用失败函数 complete function 否 接口调用结束的函数...(调用成功失败都会执行) object.success函数如下: 属性 类型 说明 最低版本 authSetting AuthSetting 用户授权结果 subscriptionsSetting

2.5K20

前端异步代码解决方案实践(一)

但大多数API为异步调用,需要传递成功失败函数,例如wx.request发起https请求需要在成功失败中书写业务逻辑,这时就很容易会遇到地狱问题。...如果业务场景需要更深层的嵌套异步操作,只需要在 then函数的成功内继续 返回接下来的异步操作的 promise对象,支持链式调用。这种书写方式更容易维护。...Promise.resolve(value) 接着说,如果链式调用里then函数成功内,我们需要逻辑判断是否返回异步操作的 promise对象,同步返回具体结果。但同时又希望链式调用能够维持。...then函数成功内进行逻辑判断,需要根据接口返回的数据进行异常处理。...,父promise马上也会用子promise的成功返回值失败详情作为参数调用父promise绑定的相应句柄,并返回该promise对象。

1.4K30

、使用Promise封装ajax()、Promise入门

、使用Promise封装ajax()、Promise入门 1 是啥 call a function call a function back callback 看这里:Callback()是什么...---方应杭知乎 callback 是一种特殊的函数,这个函数被作为参数传给另一个函数去调用。这样的函数就是函数。...1.1 例子 Callback 很常见 $button.on('click', function(){}) click后面的 function 就是一个,因为「我」没有调用过这个函数,是 jQuery...只有在请求成功并接收到响应的时候才会执行这个success函数,这就是.传一个函数作为参数但是执行,让另一个函数去调用,就是函数 1.2Callback 有点反直觉 callback 有一点「...代码都在这里 3.1 $.Ajax()中的promise 如果不使用promise,$.ajax请求的时候成功失败函数是写在参数里的,他是对象参数的一个值 $.ajax({ method

3.3K51

实现Promise,有手就行巨详细,不看血亏

then方法 js,单线程,异步,所以不管Promise执行完executor有没有结果,都会往下执行,执行到then,需要传一个两个函数分别作为成功/失败结果的 这里采用回的方式,在Promise...会调用的then方法,该方法接收两个参数, * 第一个是成功时候的函数,第二个是失败时候的函数, * 所以实现_Promise时,也要实现这个then方法 */ _Promise.prototype.then...里面的迟早都是会执行的,我们不能确定里面的什么时候执行,但是能确定的是,如果里面的执行了就会 _Promise修改状态,因此,我们可以在then的时候,将所有的成功/失败分别放到数组里保存...= [] //收集成功 _this.onRejectedCbs = [] //收集失败 // 成功执行的函数 function resolve(value) {...then方法,该方法接收两个参数, * 第一个是成功时候的函数,第二个是失败时候的函数, * 所以实现_Promise时,也要实现这个then方法 */

64510

前端面试官问Promise,怎样回答拿高分

其次,如果设置函数,Promise内部抛出的错误,不会反应到外部。第三,当处于pending状态时,无法得知目前进展到哪一个阶段(刚刚开始还是即将完成)。 5.它解决了什么问题?...从一定程度上来说,地狱能解决问题,但是有缺点,或者说优雅,阅读性非常差。 而Promise就解决了这个问题,那怎么使用Promise解决地狱问题呢 ,以上面的地狱为例。...信任问题: 函数不能保证什么时候去调用,以及使用什么方式去调用;而Promise一旦被确认成功失败,就不能再被更改。...Promise成功之后仅调用一次resolve(),不会产生多次执行的问题。除非Promise再次调用。...,将Promise对象的状态从“未完成”变为“失败”(即从 pending 变为 rejected),在异步操作失败调用,并将异步操作报出的错误,作为参数传递出去。

12110

开源即时通讯IM框架MobileIMSDK的微信小程序端开发快速入门

参数fnSuccess :{function} 接口调用成功函数,非必填项 参数fnFail :{function} 接口调用失败函数,非必填项 参数fnComplete :{function...} 接口调用结束的函数(调用成功失败都会执行),非必填项 返回值:{int} 0表示成功,否则表示错误码,错码详见“/module/mb_constants.js”下的MBErrorCode对象属性说明...**推荐用法:**开发者可在此中提示用户登陆IM服务器失败。。...14)IMSDK.callback_onIMReconnectSucess(): **用途:**由开发者设置的方法:掉线重连成功后的(事件通知于掉线重连成功后)。...**说明:**开发者设置的情况下,框架默认将调用wx.showModal()显示提示信息,否则将使用开发者设置的——目的主要是给开发者自定义这种信息的UI显示,提升UI体验,别无它用】。

1.5K40

从一道让我失眠的 Promise 面试题开始,深入分析 Promise 实现细节

调用成功函数 如果状态是失败调用失败函数 下面开始实现: 1....缓存成功失败 // MyPromise.js // MyPromise 类中新增 // 存储成功函数 onFulfilledCallback = null; // 存储失败函数 onRejectedCallback...这里如果有三个 then 的调用,如果是同步,那么直接返回当前的值就行;如果是异步,那么保存的成功失败,需要用不同的值保存,因为都互不相同。之前的代码需要改进。...== // 因为不知道后面状态的变化,这里先将成功调和失败存储起来 // 等待后续调用 this.onFulfilledCallbacks.push(onFulfilled...循环调用成功失败 // MyPromise.js // 更改成功后的状态 resolve = (value) => { // 只有状态是等待,才执行状态修改 if (this.status

1.3K40

异步编程之Javascript Promises 规范介绍

if(error){ throw error; } // 取得成功时的处理 }); 上面的代码定义了一个获取文件内容的函数,读取完成后调用传入的函数,对于下面的场景...,函数嵌套很深,代码很不好看,也不容易阅读。...Promise对象有三种状态:初始状态(pending)、成功(fulfilled)和失败(rejected),其中pending为初始状态,fulfilled和rejected为结束状态。...fulfilledHandler是在promise被装载数据的时候调用,errorHandler在promise失败的时候调用,progressHandler则在progress事件触发的时候调用。...function(error){ // 获取文件内容失败时的处理 }); Promises 链式调用 then方法在fulfilledHandler或者errorHandler完成之后

64780

从零开始写一个符合PromisesA+规范的promise

promise实例传入的异步方法执行成功就执行注册的成功函数,失败就执行注册的失败函数。...,当promise reslove时,就把异步执行结果赋值给promise实例的value,并把这个值传入成功中执行,失败就把异步执行失败原因赋值给promise实例的error,并把这个值传入失败并执行...因为是同步任务,所以当我们的promise实例reslove时,它的then方法还没执行到,所以函数还没注册上,这时reslove中调用成功肯定会报错的。...MyPromise.prototype.then = function(onFulfilled, onRejected) { const self = this; let bridgePromise; //防止使用者成功失败函数...//如果x是一个普通值,就让bridgePromise的状态fulfilled,并把这个值传递下去 } else { resolve(x); } } 首先,为防止使用者成功函数失败函数

1.5K20
领券