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

手写一个符合Promise A+规范Promise实现

前言 记得之前发过一篇关于Promise文章讲解,不过都不是很深入,只是对使用上理解,所以这次我将会带着各位通过JavaScript来实现一个Promise,并且是符合规范,最后可以通过promises-aplus-tests...,这里将会处理返回promise或者其它情况下promise状态让其直接变为完成状态并将参数值传入到下一个then const resolvePromise = (promise2, x, resolve...#') ) } // 如果x是对象或者是一个函数时候 那么它可能是一个promise,接下来将进一步解析。...then = x.then // 确定then是一个函数时候,那么肯定是一个promise if (isFunction(then)) { // 执行then...onRejected : (err) => { throw err } // then执行必须返回一个promise,形成无限链式调用(也就是形成递归) const promise2

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

手写一个Promise Class版本及Promiseapi使用方法

/* Promise函数对象race方法 返回一个promise, 其结果由第一个完成promise决定 */ static race = function...抛出一个错误,那么 then 返回 Promise 将会成为拒绝状态,并且将抛出错误作为拒绝状态回调函数参数值。...返回一个已经是接受状态 Promise,那么 then 返回 Promise 也会成为接受状态,并且将那个 Promise 接受状态回调函数参数值作为该被返回Promise接受状态回调函数参数值...返回一个已经是拒绝状态 Promise,那么 then 返回 Promise 也会成为拒绝状态,并且将那个 Promise 拒绝状态回调函数参数值作为该被返回Promise拒绝状态回调函数参数值...(iterable) 方法返回一个 promise,一旦迭代器中某个promise解决或拒绝,返回 promise就会解决或拒绝。

43830

如何封装一个可以终止Promise

今天被同事问到如何中止Promise调用链,按照官方文档意思,原生Promise是不能被中止,但是我们可以对其进行小小改造,封装一个可以被"中止"Promsie。..._reject(444) 阅读代码,我们利用闭包将每个Promisereject保存起来,在需要中止时候,去调用对应Promisereject即可"中止"Promise后续执行,巧妙实现了终止...Promisethen链执行。...总结一下:我们在使用Promise时候,通常以为Promiseresolve和reject只能在Promise内部执行,但是我们可以通过定义一个外部变量,然后在执行new Promise时候将reject...从而随时“中止”Promise执行。 如果你有其他方法或者建议欢迎留言。

1.5K21

Promise杂记 前言APIPromise特点状态追随V8中async await和Promise实现一个Promise参考

更好阅度体验 前言 API Promise特点 状态跟随 V8中async await和Promise 实现一个Promise 参考 前言 作为一个前端开发,使用了Promise...重新返回一个promise实例 Promise.race([promise Array]) --将多个 Promise 实例,包装成一个 Promise 实例。...--子promise一个实例率先改变状态,race状态就跟着改变。那个率先改变 Promise 实例返回值,就传递给race回调函数。...,状态为resolved --参数是一个原始值 返回一个 Promise 对象,状态为resolved --不带有任何参数 返回一个resolved状态 Promise 对象。...(value) // 8 }) 状态追随 状态追随概念和下面的v8处理asyac await相关联 状态跟随就是指将一个promise(代指A)当成另外一个promise(代指B)resolve

1.1K20

一个通用Java正则匹配工具

一个通用且常用Java正则匹配工具,用以检查邮箱名、电话号码、用户密>码、邮政编码等合法性。...区号(城市代码):这可能包含一个或多个从 0 到 9 数字,地区或城市代码放在圆括号—— 对不使用地区或城市代码国家(地区),则省略该组件。...电话号码:这包含从 0 到 9 一个或多个数字 @return 验证成功返回true,验证失败返回false 验证整数(正整数和负整数) @param digit 一位或多位0-9之间整数 @return...邮政编码 @return 验证成功返回true,验证失败返回false 匹配IP地址 *(简单匹配,格式,如:192.168.1.1,127.0.0.1,没有匹配IP段大小) 验证Email...IP地址(简单匹配,格式,如:192.168.1.1,127.0.0.1,没有匹配IP段大小) public static boolean checkIpAddress(String ipAddress

2K70

一个小白角度看JavaScript Promise 完整指南

1.JavaScript Promises Promise一个允许我们处理异步操作对象,它是 es5 早期回调替代方法。...链 then 返回一个 Promise ,这样就可以将多个Promise 链接在一起。....then(console.log) .catch(console.error) 使用 Promise.all 并行执行多个 Promise 通常,Promise一个一个地依次执行,但是你也可以并行使用它们...Promise race Promise.race(iterable) 方法返回一个 promise,一旦迭代器中某个promise解决或拒绝,返回 promise就会解决或拒绝。...达到限制后,我们使用Promise.race等待一个承诺完成,因此可以将其替换为新承诺。这里技巧是,promise 自动完成后会自动从队列中删除。

3.5K31

一个通用Java正则匹配工具

一个通用且常用Java正则匹配工具,用以检查邮箱名、电话号码、用户密码、邮政编码等合法性。...它包含从 0 到 9 一位或多位数字, * 数字之后是空格分隔国家(地区)代码。...* 区号(城市代码):这可能包含一个或多个从 0 到 9 数字,地区或城市代码放在圆括号—— * 对不使用地区或城市代码国家(地区),则省略该组件。...* 电话号码:这包含从 0 到 9 一个或多个数字 * @return 验证成功返回true,验证失败返回false */ public static boolean checkPhone...IP地址(简单匹配,格式,如:192.168.1.1,127.0.0.1,没有匹配IP段大小) * @param ipAddress IPv4标准地址 * @return 验证成功返回

1.2K00

leetcode 通配符匹配_匹配任意一个字符通配符是

大家好,又见面了,我是你们朋友全栈君。 给定一个字符串 (s) 和一个字符模式 § ,实现一个支持 ‘?’ 和 ‘*’ 通配符匹配。 ‘?’ 可以匹配任何单个字符。...‘*’ 可以匹配任意字符串(包括空字符串)。 两个字符串完全匹配才算匹配成功。 说明: s 可能为空,且只包含从 a-z 小写字母。 p 可能为空,且只包含从 a-z 小写字母,以及字符 ?...可以匹配 'c', 但第二个 'a' 无法匹配 'b'。...示例 4: 输入: s = "adceb" p = "*a*b" 输出: true 解释: 第一个 '*' 可以匹配空字符串, 第二个 '*' 可以匹配字符串 "dce"....或者p[j] == s[i]的话,那么p[j]一定要匹配字母,如果p[j] 是一个字母且p[j] != s[i]那么匹配失败,如果p[j] == ‘*’的话那么可以选择匹配一个字符或者不匹配

34420

用真机开始你一个Android程序(众多坑)

上一篇文章:安装Android Studio 程序安装后初始化 点击cancel。 ? ? 一直下一步即可 ? ? ? ? ? 自己网速还是挺快,家里移动。...提示:如果你CPU是AMD的话,可能会出现无法安装HAXM硬件加速情况。如果是Intel直接跳过此步。 ?...Application name自己设置,这个就是你APP名字,是在安卓系统中应用名。   Company domain:输入你博客/公司/学校域名。 ? ? ?...这时候创建好后是不能直接运行,如果你直接运行,会提示Module not specified.这时候只要点击下面错误提示中小蓝字去安装即可。...版权所有:可定博客 © WNAG.COM.CN 本文标题:《用真机开始你一个Android程序(众多坑)》 本文链接:https://wnag.com.cn/1001.html 特别声明:除特别标注

79220

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

支持同步任务 我们知道,我们在使用es6 promise时,可以传入一个异步任务,也可以传入一个同步任务,但是我们上面基础版代码并不支持同步任务,如果我们这样写就会报错: let promise =...,如果回调函数返回一个promise并且状态还是pending,就在这个promisethen方法中继续解析这个promise reslove传过来值,如果值还是pending状态promise就继续解析...主线逻辑实现后,这些方法都不难实现,all原理就是返回一个promise,在这个promise中给所有传入promisethen方法中都注册上回调,回调成功了就把值放到结果数组中,所有回调都成功了就让返回这个...方法那就返回一个promise呗,内部将原来参数后面拼接一个回调函数参数,在回调函数里执行这个promisereslove方法把结果传出去,promiseify就实现了。...star~ 项目地址:本文代码github仓库 另外,实现一个符合Promises/A+规范promise不止本文一种实现方式,本文只是选取了一种比较通俗易懂实现方式作为讲解,大家也可以用自己方式去实现一个符合

1.5K20

一个流传广泛正则匹配所有中文错误表示

在网上搜索正则表达式匹配中文时候,通常会得到这样一个正则表达式: \u4e00-\u9fa5 # 常用标点符号则直接列举出来 \u3002\uff1f\uff01\uff0c\u3001\uff1b...这个生僻字确实没见过,搜索了一下: 䶮是一个汉字,读作yǎn,是指飞龙在天,或者是有我无敌,唯吾独尊意思。...(古代皇帝头脑发热给自己名字造字,却把我们带坑里了) 不过认识多一个汉字对我们解决这个问题并没有太多好处,于是搜索匹配所有汉字正则写法,找到这个文章:https://juejin.cn/post/6844904116842430471...于是查了这个字unicode编码“4DAE”,还真就不在上述范围! 于是搜索所有中文unicdoe编码,这是一个正确方向: 2E80~33FF:中日韩符号区。...(简体、繁体、生僻字等),直接使用下面的表达式: \u2e80-\u9fff 不过需要说明是,这并不是一个严格匹配所有中文正则表达式(会把一些日韩字符也匹配到),不过对于我们场景却是合适

1.3K20

家电行业寒冬中,“卖火柴小女孩”一个一个

在如今全球经济萎靡之时,许多“街头”涌现出了一个个“卖火柴小女孩”,甚至在某些行业,企业集体上街“卖火柴”情况亦是成为了常态。...就像大家电市场,一个个企业纷纷成为“小女孩”,火柴卖不出去,还得考虑“温饱”,如何避免“小女孩”结局,这应该是他们现在最关心问题。...一季度家电市场大幅下跌,其实算是“情理之中,意料之外”。 近几年来整个家电市场本就是就已经处于一个天花板状态,加上房地产市场收紧,“黑天鹅”飞过,下跌是情理之中。...但说白了,这些举措对于企业渡过寒冬,本质上意义并不大,更多只是一个“自我展示和信心激励”,于是就有了一些更加直接方式。...在“智能相对论”与众多行业品牌交流后发现,其实作为品牌方他们信心是比较充足,至少他们相信“危机”并存。 海信空调在接受采访时表示“家电企业在2020年都面临着巨大市场压力。

40110

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

支持同步任务 我们知道,我们在使用es6 promise时,可以传入一个异步任务,也可以传入一个同步任务,但是我们上面基础版代码并不支持同步任务,如果我们这样写就会报错: let promise =...,如果回调函数返回一个promise并且状态还是pending,就在这个promisethen方法中继续解析这个promise reslove传过来值,如果值还是pending状态promise就继续解析...主线逻辑实现后,这些方法都不难实现,all原理就是返回一个promise,在这个promise中给所有传入promisethen方法中都注册上回调,回调成功了就把值放到结果数组中,所有回调都成功了就让返回这个...方法那就返回一个promise呗,内部将原来参数后面拼接一个回调函数参数,在回调函数里执行这个promisereslove方法把结果传出去,promiseify就实现了。...star~ 项目地址:本文代码github仓库 另外,实现一个符合Promises/A+规范promise不止本文一种实现方式,本文只是选取了一种比较通俗易懂实现方式作为讲解,大家也可以用自己方式去实现一个符合

1K10
领券