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

typeScript版仿Promise源码

作为一个前端, 还有人说不会用 Promise,真的就有点过分了. 为了跟上卷的潮流,我们今天就用typeScript 来实现一下 Promise 的实现....*写 promise 之前我们需要明确一些常识....) promise 状态一旦改变就冻结, 不再发生改变 支持链式调用 拥有 all, resolve, reject, race 四个静态方法 下面我们开始进入代码块 // 首先promise 有三个状态...(reason) } } } 以上我们就实现了一个很简单的 Promise, 这个 Promise 很弱, 只能执行同步代码, 也不支持链式调用.显然这样肯定不行的, 大家都知道, Promise...*异步处理我们大致解决方案是 首先在 then 判断 Promise 状态, 如果是 padding, 说明 promise 异步了 确定异步了,resolve肯定是迟于 then 执行了, 所以我们将

53320

从C#到TypeScript - Promise

从C#到TypeScript - Promise 背景 相信之前用过JavaScript的朋友都碰到过异步回调地狱(callback hell),N多个回调的嵌套不仅让代码读起来十分困难,维护起来也很不方便...这篇先来看看PromisePromise的特点 Promise之于TypeScript,相当于Task之于C#,只有返回Promise的函数才能使用async await。...Promise的使用 可以直接new一个Promise对象,构造函数的参数是一个有两个参数的函数。...而且Promise的异常是冒泡传递的,最后面写一个catch就可以捕获到前面所有promise可能发生的异常,如果用reject就需要每个都写。...Promise除了用then来顺序执行外,也同样可以不阻塞同时执行多个Promise然后等所有结果返回再进行后续操作。

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

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

    我们可以将传给then函数和新Promise的resolve一起push到前一个Promise的callbacks数组中,达到承前启后的效果: 承前:当前一个Promise完成后,调用其resolve变更状态...如果返回的结果是个Promise,则需要等它完成之后再出发新Promise的resolve,所以可在其结果的then里调用新Promise的resolve then(onFulfilled, onReject...这个方法返回一个新的Promise对象 遍历传入的参数,用Promise.resolve()将参数“包一层”,使其变成一个Promise对象 参数所有回调成功才是成功,返回值数组与参数顺序一致 参数数组其中一个失败...,则触发失败状态,第一个触发失败状态的Promise错误信息作为Promise.all的错误信息 function promiseAll(promises){ return new Promise...因为Promise的状态只能改变一次,那么我们只需要把Promise.race中产生的Promise对象的resolve,注入到数组中的每一个Promise实例中的回调函数即可。

    96410

    Promise

    Promise构造函数执行时立即调用executor函数,resolve和reject两个函数作为参数传递给executor(executor函数在Promise返回所建promise实例对象前被调用)...executor内部通常会执行一些异步操作,一旦异步操作执行完毕(成功/失败)要么调用resolve函数来将promise状态改成fulfilled,要么将promise函数将状态改为rejected。...---- 2.描述 promise对象是一个代理对象(代理一个值),被代理的值在Promise对象创建时可能是未知的。它允许你对异步操作的成功和失败分别绑定对应的处理方法。...一个promise有以下几种状态: pending :初始状态 fulfilled:操作成功完成 rejected: 操作失败 ---- 3.创建Promise 想要某个函数拥有promise函数...,只需让其返回一个promise即可 function myAsyncFun(url){ return new Promise((resolve, reject)=>{ const xhr

    70220

    Promise

    Promise.png Promise Promise 的含义 Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大 对象的状态不受外界影响。...Promise.race() Promise.race方法同样是将多个 Promise 实例,包装成一个新的 Promise 实例 只要其中之中有一个实例率先改变状态,状态就跟着改变 const p =...Promise.race([p1, p2, p3]); Promise.resolve() 有时需要将现有对象转为 Promise 对象,Promise.resolve方法就起到这个作用 参数是一个...Promise 实例,该实例的状态为rejected 应用 我们可以将图片的加载写成一个Promise,一旦加载完成,Promise的状态就发生变化。...Promise.try() Promise.try就是模拟try代码块,就像promise.catch模拟的是catch代码

    70330

    Promise

    1.Promise的立即执行性 var p = new Promise(function(resolve, reject){ console.log("create a promise"); resolve...); 控制台输出: "create a promise" "after new Promise" "success" Promise对象表示未来某个将要发生的事件,但在创建(new)Promise时,作为...有些同学会认为,当Promise对象调用then方法时,Promise接收的函数才会执行,这是错误的。因此,代码中"create a promise"先于"after new Promise"输出。...当Promise刚创建完成时,处于pending状态;当Promise中的函数参数执行了resolve后,Promise由pending状态变成resolved状态;如果在Promise的函数参数中执行的不是...return 另一个 Promise,then方法将根据这个Promise的状态和值创建一个新的Promise对象返回。

    60020

    Promise

    ——简嫃 在前端开发中经常会使用异步方法 这里介绍Promise函数 定义方式: // Promise内部构造参数为一个闭包,闭包中传入你想要异步处理的逻辑 new Promise((resolve...reject则是异常逻辑或错误逻辑时执行,当异步方法中抛出异常,会自动调用reject,这里也可以手动调用 resolve(1) }) 然后定义完了,我们就可以开始调用 调用写法如下: new Promise...=>{ console.log(res+1) }).catch(error=>{ console.log(error) }) 打印结果为ruben 我们也可以用另一种写法: new Promise...,第二个则相当于`catch`函数的参数 .then(res=>{ console.log(res+1) },error=>{ console.log(error) }) 如果我们对于Promise...要让他同步处理,也就是说我要等他执行完再执行后面的逻辑,可以在前面加一个await await new Promise((resolve,reject)=>{ throw new Error("

    36420

    javascript异步之Promise.all()、Promise.race()、Promise.finally()

    依然使用axios进行ajax请求 Promise.all() Promise.all()有点像“并行” 我们看一个栗子 <!...Promise.all就是用于将多个 Promise 实例,包装成一个新的 Promise 实例 Promise.all,接收一个数组作为参数,数组的每一项都返回Promise实例 我们重点看这段代码...错啦'); }) p1,p2,p3都是返回promise实例,Promise.all不关心他们的执行顺序,如果他们都返回成功的状态,Promise.all则返回成功的状态,输出一个数组,...三个promise实例参数之间是“与”的关系,全部成功,Promise.all就返回成功,有一个失败,Promise.all就返回失败 换个角度说,一个promise的执行结果依赖于另外几个promise...,用法和Promise.all类似,对应参数的要求和Promise.all相同,传入一个数组作为参数,参数要返回一个Promise实例 race就是竞争的意思,数组内的Promise实例,谁执行的快,就返回谁的执行结果

    2.4K30

    Promise 详解

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

    47320

    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的执行结果。...promise错误处理 方法1:reject('错误信息‘).then(null,message =>{}); 方法2:throw new Error('错误信息’).catch(message =>

    41910

    Promise对象

    Promise.all方法常被用于处理多个promise对象的状态集合。...参数里的任意一个子promise被成功或失败后,父promise马上也会用子promise的成功返回值或失败详情作为参数调用父promise绑定的相应句柄,并返回该promise对象。...通常而言,如果你不知道一个值是否是Promise对象,使用Promise.resolve(value)来返回一个Promise对象,这样就能将该value以Promise对象形式使用。...当这个回调函数被调用,新promise将以它的返回值来resolve,否则如果当前promise进入fulfilled状态,则以当前promise的完成结果作为新promise的完成结果。...Promise.prototype.finally(onFinally) 添加一个事件处理回调于当前promise对象,并且在原promise对象解析完毕后,返回一个新的promise对象。

    56310

    promise详解

    // 1.使用setTimeout // setTimeout(() => { // console.log(‘Hello World’); // }, 1000) // 什么情况下会用到Promise...'222') }).then(res => { console.log(res, '第三层的10行处理代码'); }) // 省略掉Promise.resolve new Promise((...'222') }).then(res => { console.log(res, '第三层的10行处理代码'); }) // 省略掉Promise.resolve new Promise((...()的使用 Promise.all([p1, p2, p3])用于将多个promise实例,包装成一个新的Promise实例,返回的实例就是普通的promise 它接收一个数组作为参数 数组里可以是Promise...对象,也可以是别的值,只有Promise会等待状态改变 当所有的子Promise都完成,该Promise完成,返回值是全部值得数组 有任何一个失败,该Promise失败,返回值是第一个失败的子Promise

    70820

    扫码

    添加站长 进交流群

    领取专属 10元无门槛券

    手把手带您无忧上云

    扫码加入开发者社群

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭
      领券