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

JavaScript手写Promise、Promise.then()、Promise.all()、Promise.race()

我们可以将传给then函数和新Promise的resolve一起push到前一个Promise的callbacks数组中,达到承前启后的效果: 承前:当前一个Promise完成后,调用其resolve变更状态...如果返回的结果是个Promise,则需要等它完成之后再出发新Promise的resolve,所以可在其结果的then里调用新Promise的resolve then(onFulfilled, onReject...接收一个Promise实例的数组或具有Iterator接口的对象作为参数 这个方法返回一个新的Promise对象 遍历传入的参数,用Promise.resolve()将参数“包一层”,使其变成一个Promise...该方法的参数是Promise实例数组,然后其then注册的回调方法是数组中的某一个Promise的状态变为fufilled的时候执行。...因为Promise的状态只能改变一次,那么我们只需要把Promise.race中产生的Promise对象的resolve,注入到数组中的每一个Promise实例中的回调函数即可。

98310

Promise

Promise.png Promise Promise 的含义 Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大 对象的状态不受外界影响。...then方法 Promise.prototype.catch() Promise.prototype.catch方法是.then(null, rejection)的别名,用于指定发生错误时的回调函数 Promise...对象的错误具有“冒泡”性质,会一直向后传递,直到被捕获为止 Promise.prototype.finally() finally方法用于指定不管 Promise 对象最后状态如何,都会执行的操作 Promise.all...() Promise.all方法用于将多个 Promise 实例,包装成一个新的 Promise 实例 (1)只有p1、p2、p3的状态都变成fulfilled,p的状态才会变成fulfilled,此时...Promise 实例,该实例的状态为rejected 应用 我们可以将图片的加载写成一个Promise,一旦加载完成,Promise的状态就发生变化。

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

    高级 Promise 模式 - Promise缓存

    我们将通过介绍基于 Singleton Promise 模式的 Promise Memoization 模式来做到这一点。...我们的方法签名虽然没有改变我们仍然返回一个 promise ,但是我们是同步进行的。...这是因为所有后续调用者都收到与第一个相同的 Promise 单例。 Promise 缓存 从另一个角度看,我们的最后一个缓存实现实际上只是在记忆 getUserById!...给定我们已经看到的输入后,我们只返回存储的结果(恰好是一个Promise)。 因此,记住我们的异步方法可以使我们在没有竞争条件的情况下进行缓存。...错误处理 对于 API 客户端,你应考虑操作可能失败的可能性。如果我们的内存实现已缓存了被拒绝的 Promise ,则所有将来的调用都将以同样的失败 Promise 被拒绝!

    1.6K20

    Promise

    实际上Promise的用法非常简单,自己不太理解的只是then() finally() catch()在链式调用时缺省回调函数的情况 Description Promise像某个值的代理,该值在promise...上述两种情况发生时候,通过promise的then()方法关联的响应器 [promise states] 链式Promises 当一个promise处于settled状态时,promise.then()...() 还有4个比较特殊的静态方法 - 用于promise对象组上的操作 Promise.all(iterable) 等待可迭代对象中的promise对象都被resolved或rejected, 如果全部都是...的入参是第一个rejected 的promise对象的reject时的返回值 const promise1 = Promise.resolve(3); const promise2 = 42; const...如果第一个settled的promise对象是resolved,则该方法产生的promise也立马resolved,且值和所述的第一个promise对象一样。如果第一个是rejected,同理!

    70250

    Promise

    人活在世,不过一场美丽的寄居。...——简嫃 在前端开发中经常会使用异步方法 这里介绍Promise函数 定义方式: // Promise内部构造参数为一个闭包,闭包中传入你想要异步处理的逻辑 new Promise((resolve...((resolve,reject)=>{ // 假设我这里异步方法处理完后得到的结果为1,我就传入一个1 resolve(1) }) .then(res=>{ // 然后异步方法执行完了...,我再对结果进行异步处理,让得到的1再加一个1 console.log(res+1) }) 使用then可以执行异步方法后续处理,将异步方法的回调的结果作为参数 这里执行后就会打印2 如果发生异常...resolve,reject)=>{ throw new Error("ruben") resolve(1) }) // 这里在then中传入两个闭包,第二个则相当于`catch`函数的参数

    36720

    promise & axios & async_await 关于 Promise

    【1】Promise是什么 Promise 是ES6里面异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。...简单说Promise 就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。从语法上说,Promise 是一个对象,从它可以获取异步操作的消息。...,返回最先执行结束的 Promise 任务的结果,不管这个 Promise 结果是成功还是失败; (4)all:如果全部成功执行,则以数组的方式返回所有 Promise 任务的执行结果,如果有错误就返回...实例使用then方法返回的是一个新的Promise实例(注意,不是原来那个Promise实例)。...后一个 then会根据前一个then之后返回的Promise对象的状态(成功/失败)去决定走后一个then的成功回调还是失败的回调 const promise = new Promise((resolve

    1.5K20

    JavaScript中的 return await promise 与 return promise

    ,您可以等待该承诺得到解决,或者您可以直接返回它:return await promise return promise: async function func1() { const promise...相同行为 为了找到两个表达式(与)的区别,(return await promise vs return promise), 我要使用辅助功能。 delayedDivide(n1, n2)....该函数除以 2 个数字,并返回以承诺包裹的分区结果: function promisedDivision(n1, n2) { if (n2 === 0) { return Promise.reject...catch(error) { ... } 现在,您可以轻松地看到使用和:return await promisereturn promise 当被包裹起来时,附近的渔获物只有在等待承诺时才会被拒绝(这是事实...return await promisereturn promise 但是,如果你想抓住拒绝的承诺,你从异步功能返回,那么你绝对应该使用表达和故意添加。

    2.1K20

    标准的Promise

    序言 不同项目下lib里的promise/deferred往往是差异化最多的,用起来和自己的习惯相比经常是缺胳膊少腿多屁眼有卵用,因此聊聊标准的Promise的啥样的 不同的Promise差异基本表现如下.../A Promises/A+ Promises/A+兼容扩展Promises/A而来,es6里的Promise准守Promises/A+规范,也是当今的标准规范。...标准的Promise 构造 : new Promise(function(resolve, reject) {}) 静态方法 : Promise.all(iterable) Promise.race(iterable...不标准的使用 构造Promise对象: new Promise().resolve() ( 请使用new Promise(function(resolve, reject) {}) ) .done()...支持标准es6 promise规范 npm promise 支持标准es6规范,增加了done()等方法 npm node-promise 支持标准es6规范,增加了更多的工具方法,人气不如npm promise

    71350

    Promise 详解

    本文旨在探讨Promise 出现背景、实现原理以及常用方法的实现。本文不是Promise的基本教程,如有不了解的读者,可以参考Promise mdn[1] 。...Promise 的出现很大程度解决上述问题。我们可以具体来看看Promise实现原理。 实现原理 Promise 主要通过以下两步来解决回调嵌套问题: 实现回调函数的延时绑定。...如果returnVal是Promise对象, 则会等该Promise对象(即returnVal)的状态发生变化才发生调用,并且新的Promise 对象状态和 returnVal状态相同。...的输入参数为 Promises数组; 其次返回对象为Promise 对象,并且返回对象Promise中的数据为执行promise 数组中的值; 如果promises 数组中1个执行失败,则返回Promise...常用的方法Promise.all 的实现 如文中有错误之处,欢迎留言斧正。

    47720

    promise总结

    new Promise( // 执行器 function (resolve, reject) { //一段耗时很长的异步操作 resolve(); //数据处理完成...reject(); //数据处理出错 } ).then(function A() { //成功 }, function B() { //失败 }) Promise...有三个状态: pengding 初始状态 fulfilled 操作成功 rejected 操作失败 Promise一经创建,立刻开始执行,每个.then()可以返回一个新的promise实例,所以可以链式调用...这里要注意,如果返回新的promise,下一级的then会在新的promise状态改变之后再执行,如果返回其他任何值,则会直接执行then,不等待上一个then的promise的执行结果。...如果上一个函数返回fulfilled状态 则执行then里的第一个成功回调函数,如果返回rejected状态则执行失败回调。 ?

    42010

    promise详解

    // 一般情况下是有异步操作时,使用Promise对这个异步操作进行封装 // new -> 构造函数(1.保存了一些状态信息 2.执行传入的函数) // 在执行传入的回调函数时, 会传入两个参数, resolve...(res + '222') }).then(res => { console.log(res, '第三层的10行处理代码'); }) // 省略掉Promise.resolve new Promise...(res + '222') }).then(res => { console.log(res, '第三层的10行处理代码'); }) // 省略掉Promise.resolve new Promise...直接抛出错误信息) promise.all()的使用 Promise.all([p1, p2, p3])用于将多个promise实例,包装成一个新的Promise实例,返回的实例就是普通的promise...Promise失败,返回值是第一个失败的子Promise结果 // 请求一: // let isResult1 = false // let isResult2 = false // $ajax({ /

    71420

    JavaScript——Promise

    一个Promise表示一个现在、将来或永不可能用的值. Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。...假如在.then()的函数里面不返回新的Promise,会怎样??...,在Promise规范的定义当中,这个.then()会被忽略掉,所以它的完成时间是无关紧要的....() 返回一个fulfilled的Promise实例,或者原始的Promise实例 参数为空,返回一个状态为fulfilled的Promise实例 参数是一个跟Promise无关的值,同上,不过fulfilled...Promise.race([p1, p2, p3]); 只要p1、p2、p3之中有一个实例率先改变状态,p的状态就跟着改变。那个率先改变的 Promise 实例的返回值,就传递给p的回调函数。

    47220

    Promise对象

    Promise对象 JavaScript是单线程的语言,通过维护执行栈与任务队列而实现了异步操作,setTimeout与Ajax就是典型的异步操作,Promise就是异步操作的一个解决方案,用于表示一个异步操作的最终完成或失败...实例 Promise可以进行链式调用,避免过多的异步操作造成的回调地狱,then()函数默认会返回一个和原来不同的新的Promise。...这个新的promise对象在触发成功状态以后,会把一个包含iterable里所有promise返回值的数组作为成功回调的返回值,顺序跟iterable的顺序保持一致;如果这个新的promise对象触发了失败状态...参数里的任意一个子promise被成功或失败后,父promise马上也会用子promise的成功返回值或失败详情作为参数调用父promise绑定的相应句柄,并返回该promise对象。...当这个回调函数被调用,新promise将以它的返回值来resolve,否则如果当前promise进入fulfilled状态,则以当前promise的完成结果作为新promise的完成结果。

    56910

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券