基于ES6语法手写promise A+ 规范,源码实现 class Promise { constructor(excutorCallBack) { this.status =...reason.message : reason); } : null; //=>返回一个新的PROMISE实例 return new Promise((...() return new Promise((resolve, reject) => { //=>INDEX:记录成功的数量 RESULT:记录成功的结果...let i = 0; i < promiseAry.length; i++) { //=>promiseAry[i]: //每一个需要处理的PROMISE...} }, reject); } }); } } module.exports = Promise
Promise 对象用于表示一个异步操作的最终完成 (或失败)及其结果值。 # 描述 一个 Promise 对象代表一个在这个 promise 被创建出来时不一定已知的值。...# Promise 的链式调用 我们可以用 promise.then(),promise.catch() 和 promise.finally() 这些方法将进一步的操作与一个变为已敲定状态的 promise...返回一个 promise,该 promise 在所有 promise 完成后完成。并带有一个对象数组,每个对象对应每个 promise 的结果。...失败,那么 Promise.all 返回的 promise 对象失败 在任何情况下,Promise.all 返回的 promise 的完成状态的结果都是一个数组 Promise.all = function...因为 Promise 规范规定除了 pending 状态,其他状态是不可以改变的,如果返回的是一个相同的实例的话,多个 then 调用就失去意义了。
.1.promise基本用法 const promise =new Promise((resolve,reject)=>{...); }) console.log(4); 2.Promise基本用法补充 Promise的构造函数接收一个函数作为参数...Promise正是通过这两个状态来控制异步操作的结果。...在声明的时候,Promise构造函数传递的参数函数会立即执行,因此Promise使用的正确姿势是在其外层再包裹一层函数,使得构造函数中的函数按需执行,而不是立即执行。...如下: 3.使用promise来解决回调地狱的问题 服务端部分代码 //基于Promise处理ajax请求 function queryData(url){
前言 记得之前发过一篇关于Promise文章的讲解,不过都不是很深入,只是对使用上的理解,所以这次我将会带着各位通过JavaScript来实现一个Promise,并且是符合规范的,最后可以通过promises-aplus-tests...整个实现主要通过Promise A+规范来做的,可以参考以下地址: https://promisesaplus.com/ 正文 接下来的内容我将直接贴出源码,因为我在写的时候都以逐行加了注释来说明代码理解...FULFILLED, REJECTED, isArray, isObject, isFunction, onFulfilledOrOnRejectedHandler } 主文件 promise.js...(value), (err) => reject(err) ) }) }) } } // 延迟执行,这个主要用于promise A+规范跑测使用...结语 以上就是全部的代码了,代码不是很多,Promise A+规范主要在于then方法,其它辅助方法都比较容易实现。
四、Promise与异步 Promise是异步的。js异步操作是通过js的事件循环机制EventLoop实现的。...对于异步任务来说,当其可以被执行时,会被放到一个 任务队列(task queue) 里等待JS引擎去执行。...当执行栈中的所有同步任务完成后,JS引擎才会去任务队列里查看是否有任务存在,并将任务放到执行栈中去执行,执行完了又会去任务队列里查看是否有已经可以执行的任务。...总结起来js引擎对程序的执行顺序是:1。先执行同步任务的程序 2。 在执行异步任务里的微任务 3。所有微任务都执行完了后就执行异步的宏任务,但这里是一个一个宏任务去执行,不是一下子执行完。...after");//同步任务 } testFn(); 上图结果证明了上述所说的js的执行顺序 。
Promise是什么?...抽象表达: Promise是ES6中新增的规范; Promise是js中异步编程的新解决方案(旧方案采用函数回调); 具体表达: 从语法上说:Promise是一个构造函数; 从功能上说:Promise...promise 对象; 说明:返回一个成功/失败的 promise 对象; //创建promise.resolve对象 //如果传入的对象为 非promise对象 则返回的是一个 成功的promise...对象; 说明:只返回一个失败的 promise 对象; //创建promise.resolve对象 //如果传入的对象为 非promise对象 则返回的是一个 成功的promise对象 //如果传入的对象...非promise对象 则参数的结果决定了 resolve的结果 let p = Promise.reject(521); let c = Promise.reject(new Promise(
---- 感觉有帮助的小伙伴请点赞鼓励一下 ~ 前言 你可能经常使用 Promise?但你知道你使用的 Promise 是怎么来的么?你知道 Promise 遵循什么规范吗?...Promise 的规范有很多,如Promise/A,Promise/B,Promise/D 以及 Promise/A 的升级版 Promise/A+。ES6 中采用了 Promise/A+ 规范。...所以我们今天就讲一讲 Promise/A+ 规范。...任何符合 Promise 规范的对象或函数都可以成为 Promise, 我们使用的 Promise 也不过是符合 Promise/A+ 规范的其中一种形式,你也可以自己封装一个符合规范的函数,那么你写的函数也可以叫.../A+ 规范就解析完了,后面的任务就是手写 Promise 了。
扫码获取exam01.js ~ exam09.js源码 ? 3. 实现一版Promise试试!...Promise有很多社区规范,如 Promise/A、Promise/B、Promise/D 以及 Promise/A 的升级版 Promise/A+;Promise/A+ 是 ES6 Promises...---- 目标、资源 1.编写符合Promise/A+规范的RookiePromise 2....通过Promise/A+规范测试集 Promise/A+规范文档: https://github.com/promises-aplus/promises-spec Promise/A+规范测试集: https...C.第3步:执行测试 npx promises-aplus-testsRookiePromiseTestAdapter.js > log.txt ? ----
Promise; 要了解其它更为高级的异步操作得先熟悉 Promise; 基于这些目的,实践了一个符合 Promise/A+ 规范的 repromise。...本札记系列总共三篇文章,作为之前的文章 Node.js 异步异闻录 的拆分和矫正。...Promise札记 Generator札记 Async札记 Promise/A+ 核心 在实现一个符合 Promise/A+ 规范的 promise 之前,先了解下 Promise/A+ 核心,想更全面地了解可以阅读...Promise/A+规范 Promise 操作只会处在 3 种状态的一种:未完成态(pending)、完成态(resolved) 和失败态(rejected); Promise 的状态只会出现从未完成态向完成态或失败态转化...; Promise 的状态一旦转化,将不能被更改; repromise api 食用手册 Promise.resolve() Promise.resolve() 括号内有 4 种情况 /* 跟 Promise
Promise Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理且更强大。...实例 var promise = new Promise(function(resolve, reject){ // ... some code if (/* 异步操作成功 */) {...值得注意的是,Promise新建后就会立即执行。...async函数对 Generator 函数的改进,async 函数必定返回 Promise,我们把所有返回 Promise 的函数都可以认为是异步函数。...在该函数中,利用await来等待一个Promise。 Promise优缺点 优点 缺点 解决回调 无法监测进行状态 链式调用 新建立即执行且无法取消 减少嵌套 内部错误无法抛出
前言 在js的代码开发中,我简单的总结出了以下规则,后面会陆续补充并且对规范进行分类。...js代码建议保存到后缀名.js的文件中 js代码不建议放在html中,原因有:不能被缓存,会增大网页文件的大小,可维护性不高,会影响页面的加载。...js吧任何表达式都当一条简单语句,会导致一些隐性的错误。如果自己没加分号,那么js解释器会自动添加分号,按照自己能读懂的断句。 9.2 复合语句 也称为语句块,被包在大括号内部。...变量作用域 js没有有块级作用域,只有函数作用域。 [] {} 的用法 使用直接量发来声明对象和数组。...比如对象 var obj={} ;var arr=[] eval eval是最容易混乱使用的js函数,他可以执行内部入参的js函数或者表达式,可以直接解析变量。不建议使用 。
js类与构造函数参考原文献 9..../AirbnbStyleGuide'; // bad // filename es6.js export { es6 as default } from '..../AirbnbStyleGuide'; // good // filename es6.js import { es6 } from '....= b = c = 1; // good let a = 1; let b = a; let c = a; 11.6、避免使用 ++ 或 –,使用 += 或 -= 代替(eslint规范...空格(具体遵循eslint规范) 14.1、始终使用 2 个空格作为块之间的间距 14.2、在前括号【{ }, ( )】之前放置1个空格 // bad function test(){ console.log
@param @argument 指定参数名和说明来描述一个函数参数 @returns 描述函数的返回值 @author 指示代码的作者 @depreca...
撇开缓存无效不谈,这确实很困难,每当俺找不到正确的名称时,这个臭名昭著的引用就会在俺的脑海中萦绕。
也就是set开头的最后执行,promise在set之前,promise方法里的第一个执行方法不入栈,在正常栈里执行 console.log('golb1'); setImmediate(function...(function(resolve) { console.log('immediate1_promise'); resolve(); }).then(function...(function(resolve) { console.log('timeout1_promise'); resolve(); }).then(function...(function(resolve) { console.log('glob1_promise'); resolve(); }).then(function() { console.log...glob1_nextTick glob1_then timeout1 timeout1_promise timeout1_nextTick timeout1_then immediate1 immediate1
Promise实列有三个状态: – pending (进行中) – resolved (成功) – rejected(失败) 当要处理某个任务的时候,promise的状态是pending,任务完成是状态就变成了...3.all() 接受一个数组作为自己的参数,数组中每一项都是一个promise对象,当数组的每一个promise状态时resolved时,all方法的状态才会变成resolved,有一个变成rejected...5finally() 他是不管promise时什么状态都会执行的都会去执行的,他不接受任何的参数。 Promise的优点: – 对象的状态不受外界的影响,只有异步的操作结果才能改变他的状态。...– 一旦状态改变就不会在变,任何时候都可以得到这个结果,就如他的名字一样promise(承诺)。 Promise的缺点: – 无法去取消promise,只要创建就会执行,无法中途去终止。...– 如果不设置回调函数去接受,promise内部会报错,不会映射到外部 – 处在pending(进行中)时 ,外部无法得知进展到那一步 总结: Promise最早是由社区提出的,在es6才被正式的纳入规范中
return new Promise((resolve, reject)=> { // 假设此处是异步请求某个数据 $.ajax({ url: '......
EMCAScript规范 javascript语言实现,ES6规范(使用babel编译器将es6转换为es5,webpack只支持部分es6): import "jquery"; /...default只有一个,export可以有多个 commonjs规范 nodejs语言实现 require("module"); require(".....nodejs,需要通过browserify工具转换为浏览器支持js (例如:browserify main.js > compiled.js): 浏览器不兼容nodejs的几个模块 module exports...和curl.js实现 网页js的异步加载 内部函数 require.config({参数})...deps: ['underscore', 'jquery'], exports: 'Backbone' } } }); CMD 淘宝工程师编写seajs,提出cmd规范
male', age: 25 } 只对非法标识符的属性使用引号,eslint: quote-props 原因:因为通常来说我们认为这样主观上会更容易阅读,这样会带来代码高亮上的提升,同时也更容易被主流 JS...bar.css' // good import fooSass from 'foo.scss' import barCss from 'bar.css' 迭代器 建议使用 JS 更高优先级的函数代替...时等于 false, 否则是 true if ([0] && []) { // true // 数组(即使是空数组)也是对象,对象等于true } 分号 Standard 的规范是不使用分号的...,我建议统一使用分号,代码更加清晰 关于应不应该使用分号的讨论有很多,好的 JS 程序员应该清楚场景下是一定要加分号的,相信你也是名好的开发者。
那阅读起来就是苦不堪言,所以,一些基本的开发规范是必须的,是为了自己方便阅读代码,也方便他人阅读修改代码。...不推荐: 推荐: <script src="//cdn.com/foundation.min.<em>js</em>...文档<em>规范</em> HTML5的文档类型声明:<!...脚本加载 说到<em>js</em>和css的位置,大家应该都知道<em>js</em>放在下面,css放在上面。...'valid' : 'invalid' ---- JSHint 在<em>js</em><em>规范</em>中,有很多<em>规范</em>都是样式上的<em>规范</em>而不是逻辑上的<em>规范</em>,比如尽量使用=== 而不是==,我们可以使用JSHint或者JSLint,Javascript
领取专属 10元无门槛券
手把手带您无忧上云