# Promise 的链式调用 我们可以用 promise.then(),promise.catch() 和 promise.finally() 这些方法将进一步的操作与一个变为已敲定状态的 promise...这个新的 promise 对象在触发成功状态以后,会把一个包含 iterable 里所有 promise 返回值的数组作为成功回调的返回值,顺序跟 iterable 的顺序保持一致;如果这个新的 promise...# Promise.any(iterable) (opens new window) 接收一个 Promise 对象的集合,当其中的一个 promise 成功,就返回那个成功的 promise 的值。...promise 失败,那么 Promise.all 返回的 promise 对象失败 在任何情况下,Promise.all 返回的 promise 的完成状态的结果都是一个数组 Promise.all...promise 本身的状态,会返回所有 promise 的结果。
); }) console.log(4); 2.Promise基本用法补充 Promise的构造函数接收一个函数作为参数...,该函数接受两个额外的函数,resolve和reject,这两个函数分别代表将当前Promise置为fulfilled(已成功)和rejected(已失败)两个状态。...Promise正是通过这两个状态来控制异步操作的结果。...在声明的时候,Promise构造函数传递的参数函数会立即执行,因此Promise使用的正确姿势是在其外层再包裹一层函数,使得构造函数中的函数按需执行,而不是立即执行。...如下: 3.使用promise来解决回调地狱的问题 服务端部分代码 //基于Promise处理ajax请求 function queryData(url){
return new Promise((resolve, reject)=> { // 假设此处是异步请求某个数据 $.ajax({ url: '......
,但实际还是嵌套的,promise就能把回调函数给独立出来,然后链式调用。...我们优化一下上面的代码: var promise = new Promise(function (resolve, reject) { $.ajax({...然后还要讲的一个函数是promise的all函数。all函数主要用于多个请求的数据无关联的时候。...上述的代码不变,我们把调用改一下: //适用于多个ajax请求,但是每个ajax返回数据无关联的情况 Promise.all([promise, handler()])....数组中的数据是每个resolve中每个传入的数据。 ? promise不止用于异步请求,很多场景都可以用,需要大家灵活应用。
Promise是JS对象,它们用于表示一个异步操作的最终完成 (或失败), 及其结果值.查看MDN 您可以通过使用回调方法或使用Promise执行异步操作来获得结果。但是两者之间有一些细微的差异。...对象 它们是JS中构成Promise的核心部分。...所以,我们为什么需要JS中的Promise? 为了明白这个问题,我们得先来聊聊为什么在大多数的JS开发者中,仅仅使用CallBack的方法是远远不够的。...方法 JS中的Promise构造函数定义了几种静态方法,可用于从Promise中检查一个或者多个结果 Promise.all 当你想要累计一批异步操作并最终将它们的每一个值作为一个数组来接收时,满足此目标的...每当可迭代的Promise中的一个Promise以该Promise的值或原因解析或拒绝时,此方法都会返回一个履行或拒绝的Promise。
js异步操作是通过js的事件循环机制EventLoop实现的。...对于异步任务来说,当其可以被执行时,会被放到一个 任务队列(task queue) 里等待JS引擎去执行。...当执行栈中的所有同步任务完成后,JS引擎才会去任务队列里查看是否有任务存在,并将任务放到执行栈中去执行,执行完了又会去任务队列里查看是否有已经可以执行的任务。...总结起来js引擎对程序的执行顺序是:1。先执行同步任务的程序 2。 在执行异步任务里的微任务 3。所有微任务都执行完了后就执行异步的宏任务,但这里是一个一个宏任务去执行,不是一下子执行完。...after");//同步任务 } testFn(); 上图结果证明了上述所说的js的执行顺序 。
抽象表达: Promise是ES6中新增的规范; Promise是js中异步编程的新解决方案(旧方案采用函数回调); 具体表达: 从语法上说:Promise是一个构造函数; 从功能上说:Promise...解决回调地狱问题 回调地狱:回调函数嵌套调用,外部回调函数异步执行的结果是嵌套回调执行的条件; 回调地域缺点:不便于阅读,不便于异常处理; 解决方案:promise链式调用; 5.2.1 对象状态改变...promise 对象; 说明:返回一个成功/失败的 promise 对象; //创建promise.resolve对象 //如果传入的对象为 非promise对象 则返回的是一个 成功的promise...对象; 说明:只返回一个失败的 promise 对象; //创建promise.resolve对象 //如果传入的对象为 非promise对象 则返回的是一个 成功的promise对象 //如果传入的对象...变为resolved,value 为返回的值; 如果返回另一个新的 promise,此 promise 的结果就会成为新 promise 的结果; let p = new Promise((resolve
Promise 研究 Promise 的动机大体有以下几点: 对其 api 的不熟悉以及对实现机制的好奇; 很多库(比如 fetch)是基于 Promise 封装的,那么要了解这些库的前置条件得先熟悉...Promise; 要了解其它更为高级的异步操作得先熟悉 Promise; 基于这些目的,实践了一个符合 Promise/A+ 规范的 repromise。...本札记系列总共三篇文章,作为之前的文章 Node.js 异步异闻录 的拆分和矫正。...Promise/A+规范 Promise 操作只会处在 3 种状态的一种:未完成态(pending)、完成态(resolved) 和失败态(rejected); Promise 的状态只会出现从未完成态向完成态或失败态转化...return promise } 坑点 2:this 的指向问题 this.callbackArr.push() 中的 this 指向的是 ‘上一个’ promise,所以类 CallbackItem
Promise是啥? Promise是异步编程的一个解决方案,相比传统的“回调函数”方法,使用Promise更为合理和强大,避免了回调函数之间的层层嵌套,也使得代码结构更为清晰,便于维护。 ?...扫码获取exam01.js ~ exam09.js源码 ? 3. 实现一版Promise试试!...Promise有很多社区规范,如 Promise/A、Promise/B、Promise/D 以及 Promise/A 的升级版 Promise/A+;Promise/A+ 是 ES6 Promises...至此,RookiePromise编码完成; 小结一下: RookiePromise的结构是按照Promise/A+规范中对then、resolve接口的描述组织的;优点是编码过程直观,缺点是innerResolve...C.第3步:执行测试 npx promises-aplus-testsRookiePromiseTestAdapter.js > log.txt ? ----
js构造继承的缺点 1、实例不是父类的实例,只是子类的实例。 2、能够继承父类的实例属性和方法,不能继承原型属性/方法。 3、函数无法复用,每个子类都有父类实例函数的副本,影响性能。...function(){ alert(this.name) } var ldh=new Star('刘德华',28) var zxy=new Star('张学友',29) 以上就是js...构造继承的缺点,希望对大家有所帮助。
Promise是异步编程的一中解决方案,最早是由社区提出的,es6中正式的将其纳入,他是一个对象,可以获取到异步的操作,他相比传统的回调函数,更加的强大和合理,避免了回调地狱。...所谓的Promise,简单的来说就是一个可以存放未来才能结束的任务或者事件。 1....3.all() 接受一个数组作为自己的参数,数组中每一项都是一个promise对象,当数组的每一个promise状态时resolved时,all方法的状态才会变成resolved,有一个变成rejected...5finally() 他是不管promise时什么状态都会执行的都会去执行的,他不接受任何的参数。 Promise的优点: – 对象的状态不受外界的影响,只有异步的操作结果才能改变他的状态。...– 一旦状态改变就不会在变,任何时候都可以得到这个结果,就如他的名字一样promise(承诺)。 Promise的缺点: – 无法去取消promise,只要创建就会执行,无法中途去终止。
micro-task包括:process.nextTick, Promises, Object.observe, MutationObserver 总的来说就是: 不同的任务会放进不同的任务队列之中...先执行macro-task,等到函数调用栈清空之后再执行所有在队列之中的micro-task。...当有多个macro-task(micro-task)队列时,事件循环的顺序是按上文macro-task(micro-task)的分类中书写的顺序执行的。...先执行正常栈中的代码,在执行micro-task,然后是macro-task....也就是set开头的最后执行,promise在set之前,promise方法里的第一个执行方法不入栈,在正常栈里执行 console.log('golb1'); setImmediate(function
Promise Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理且更强大。...1与4的顺序不必再说,而2与3先输出Promise的then,而后输出定时器任务。...async函数对 Generator 函数的改进,async 函数必定返回 Promise,我们把所有返回 Promise 的函数都可以认为是异步函数。...特点体现在以下四点: 内置执行器 更好的语义 更广的适用性 返回值是 Promise await 顾名思义,等待。正常情况下,await命令后面是一个 Promise 对象,返回该对象的结果。...在该函数中,利用await来等待一个Promise。 Promise优缺点 优点 缺点 解决回调 无法监测进行状态 链式调用 新建立即执行且无法取消 减少嵌套 内部错误无法抛出
Promise对象是干嘛用的?...将异步操作以同步操作的流程表达出来 一、Promise对象的定义 let flag = true; const hello = new Promise(function (resolve, reject...reject,第一个执行reject方法的返回值会传递给p的回调函数 race 类似all,也将多个promise实例包装成一个新的promise实例 不同的是,要p1、p2、p3之中有一个实例发生改变...,最先改变的 Promise 实例的返回值会传递给p的回调函数。...返回一个新的 Promise 实例,该实例的状态为rejected const p = Promise.reject('出错了'); // 等同于 const p = new Promise((resolve
this.queue = [] this.flushing = false this.enqueue = function (executor) { const p = new Promise...} } } function Task(executor, resolve, reject) { this.execute = () => { return new Promise
js原型链的优缺点 1、优点是非常纯粹的继承关系,实例是子类的实例,也是父类的实例。子类可以访问父类新的原型方法和属性。 2、缺点是替换原型后需要重写方法。不能用对象字面量创建原型方法。...__proto__ === Person.prototype) //true 以上就是js原型链的优缺点,希望对大家有所帮助。...更多js学习指路:js教程 推荐操作环境:windows7系统、jquery3.2.1版本,DELL G3电脑。
Promise 是一个对象,用于表示一个异步操作的最终状态(完成或失败),以及该异步操作的结果值。 Promise 是一个代理(代理一个值),被代理的值在Promise对象创建时可能是未知的。...即:async 函数在 await 之前的代码都是同步执行的,可以理解为await之前的代码属于new Promise时传入的代码,await之后的所有代码都是在Promise.then中的回调; 2.6...如何保证自己实现的 Promise 符合规范? 用官方的Promise规范测试集,测试自己的实现。...RookiePromise 编码小结 RookiePromise的结构是按照Promise/A+规范中对then、resolve接口的描述组织的;优点是编码过程直观,缺点是innerResolve函数篇幅太长...执行测试 npx promises-aplus-testsRookiePromiseTestAdapter.js > log.txt ?
js中Promise的状态探究 1、promise可以处于等待被赋值的等待态(pending),可以给出值并转换为解决态(resolved)。...2、一旦promise被一个值resolve丢失,它将始终保持这个值不再被resolve丢失。...value); } this.then = function(onResolved) { handle(onResolved); }; fn(resolve); } 以上就是js...中Promise的状态探究,希望对大家有所帮助。...更多js学习指路:js教程 收藏 | 0点赞 | 0打赏
js原型链继承的缺点 1、为了给子类添加新的属性和方法,必须在newAnimal()这样的句子之后执行,不能放在构造器中。 2、原型对象的所有属性都由所有实例共享。...console.log(cat instanceof Animal); //true console.log(cat instanceof Cat); //true 以上就是js原型链继承的缺点,希望对大家有所帮助
js工厂模式的优缺点 1、优点,通过工厂模式,我们可以快速创建大量相似对象,没有重复代码。 2、缺点,工厂模式创建的对象属于Object,无法区分对象类型,这也是工厂模式没有广泛使用的原因。... obj.name = name; obj.age = age; return obj; } var person1 = creatPerson("jim", 24); 以上就是js...工厂模式的优缺点,希望对大家有所帮助。
领取专属 10元无门槛券
手把手带您无忧上云