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

JavaScript Promise

当今Node.js大热,好像很多团队都要用它来做点东西以沾沾“洋气”,曾经跟一个运维的同学聊天,他们也是打算使用Node.js做一些事情,可是一想到js的层层回调就望而却步。...当然,Node.js的例子可查看这里。...标准的Promise 可参考html5rocks的这篇文章JavaScript Promises,目前高级浏览器如Chrome、Firefox都已经内置了Promise对象,提供更多的操作接口,比如Promise.all...其他类库,这里值得一提的是when.js,本身代码不多,完整实现Promise,同时支持browserNode.js,而且提供更加丰富的API,是个不错的选择。这里限于篇幅,不再展开。...但Promise也只是解决了回调的深层嵌套的问题,真正简化JavaScript异步编程的还是Generator,在Node.js端,建议考虑Generator。

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

JavaScript Promise(上)

由于 Promise 是 ES6 新增加的,所以一些旧的浏览器并不支持,苹果的 Safari 10 Windows 的 Edge 14 版本以上浏览器才开始支持 ES6 特性。...以下是 Promise 浏览器支持的情况: Chrome 58 Edge 14 Firefox 54 Safari 10 Opera 55 构造 Promise 现在我们新建一个 Promise...Promise 的使用 下面我们通过剖析这段 Promise "计时器" 代码来讲述 Promise 的使用: Promise 构造函数只有一个参数,是一个函数,这个函数在构造之后会直接被异步运行,所以我们称之为起始函数...起始函数包含两个参数 resolve reject。...resolve reject 都是函数,其中调用 resolve 代表一切正常,reject 是出现异常时所调用的: 实例 new Promise(function (resolve, reject

22310

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实例中的回调函数即可。

92610

JavaScript期约Promise

我们应该明确一点就是resolverejected是相悖的,它的状态只能改变一次,在确定执行后也不能通过调用相悖的方法来改变。...setTimeout(console.log,0,p);//Promise {} setTimeout(console.log,11000,p)//Promise {<...期约的实例方法 Promise.prototype.then() 在ES6异步结构中,任何对象都有一个then()方法,它接收俩个参数 onResolvedonRejected,这俩个参数是可选的,如果我们传入的话它会在期约分别进入不同状态时执行...() finally()这个实力不同于thencatch方式返回的实例,它被设定为一个与状态无关的方法,运行它后都会原样返回父期约,无论父期约是解决还是拒绝,都会原样后传。...let p1 = Promise.resolve('jackson'); let p2 = p1.finally(); //Promise jackson let

33030

JavaScript Promise(下)

Promise 类有 .then() .catch() .finally() 三个方法,这三个方法的参数都是一个函数,.then() 可以将参数中的函数添加到当前 Promise 的正常执行序列,....但是请注意以下两点: resolve reject 的作用域只有起始函数,不包括 then 以及其他序列; resolve reject 并不能够使起始函数停止运行,别忘了 return。...回答常见的问题(FAQ) Q: then、catch finally 序列能否顺序颠倒? A: 可以,效果完全一样。但不建议这样做,最好按 then-catch-finally 的顺序编写程序。...所以最好只安排一个 catch finally 块。 Q: then 块如何中断?...A: 当需要多次顺序执行异步操作的时候,例如,如果想通过异步方法先后检测用户名密码,需要先异步检测用户名,然后再异步检测密码的情况下就很适合 Promise

29820

JavaScript Promise (期约)

永远都不应该依赖于不同 Promise 间回调的顺序调度。 # 回调未调用 没有任何东西(甚至 JavaScript 错误)能阻止 Promise 通知它的决议(如果它决议了的话)。...# 未能传递参数 / 环境值 Promise 至多只能有一个决议值(完成或拒绝)。 如果没有用任何值显式决议,那么这个值就是 undefined,这是 JavaScript 常见的处理方式。...如果在 Promise 的创建过程中或在查看其决议结果过程中的任何时间点上出现了一个 JavaScript 异常错 误,比如一个 TypeError 或 ReferenceError ,那这个异常就会被捕捉...Promise 甚至把 JavaScript 异常也变成了异步行为,进而极大降低了竞态条件出现的可能。 # 是可信任的 PromisePromise 并没有完全摆脱回调。...# then() catch() 每个 Promise 实例(不是 Promise API 命名空间)都有 then() catch() 方法,通过这两个方法可以为这个 Promise 注册完成拒绝处理函数

43530

重学JavaScript Promise API

JavaScript中,一些操作是异步的。这意味着当这些操作完成时,它们产出的结果或者值并不会立即生效。 Promise是一个特殊的JavaScript对象,它代表了异步操作的最终结果。...回调接收两个参数:resolvereject,它们都是函数。我们所有的异步代码都在回调函数中。 如果一切运行成功,则通过调用 resolve 来实现Promise。...Promise的状态 在上面代码中,我们可以通过调用resolvereject方法来改变Promise的状态。在继续之前,花点时间看下Promise的生命周期。...,因此我们可以在它的返回值上链式调用更多的then、catchfinally调用。...虽然它实际上只是Promise之上的语法糖,但在很多情况下,它可以让基于Promise的代码更容易阅读理解。

12820

javascript异步与promise

我们说处理javascript异步最常用的方式就是通过回调函数,对于回调函数我们昨天对此做了介绍 简单快速, 我们一般使用嵌套回调或者链式回调,会产生以下问题 当采用嵌套回调时,会导致层级太多,不利于维护...,上面的等待汉堡得到汉堡,汉堡卖光了,得不到汉堡,分别对应promise的三种状态 三种状态:pending(进行中)、fulfilled(已成功)rejected(已失败)(一旦状态改变,就不会再变...事件循环任务队列 事件循环就像是一个游乐场,玩过一个游戏后,你需要重新排到队尾才能再玩一次 任务队列就是,在你玩过一个游戏后,可以插队接着玩 我们看一个栗子 const promise = new...回调函数调用过晚 回调函数调用过晚的处理原理调用过早很类似, 在promise的then()中存放着异步函数,所有的异步都存在于js的任务队列中,当js的主线程执行完毕后,会依次执行任务队列中的内容...有三种状态 pending(进行中)、fulfilled(已成功)rejected(已失败)状态一旦状态改变,就不会再变 一个栗子 const promise = new Promise((resolve

88140

JavaScript中的 return await promise 与 return promise

原文地址:'return await promise' vs 'return promise' in JavaScript 原文作者:Dmitri Pavlutin 译文出自:掘金翻译计划 当从异步功能中返回时...在此步骤中,您已经看到使用没有区别 return await promise and return promise 至少在处理成功履行承诺时。 但是,让我们搜索更多! 2....catch(error) { ... } 现在,您可以轻松地看到使用:return await promisereturn promise 当被包裹起来时,附近的渔获物只有在等待承诺时才会被拒绝(这是事实...结论 在大多数情况下,特别是如果承诺成功解决,使用使用之间没有太大的区别。...return await promisereturn promise 但是,如果你想抓住拒绝的承诺,你从异步功能返回,那么你绝对应该使用表达故意添加。

2K20

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

今天我们继续讨论promise 网络上关于PromiseAPI使用的文章多如牛毛,为了保持javascript异步系列文章的完整性,现在对promise的API进行简单全面的介绍 准备工作 我在easy-mock...Promise.all就是用于将多个 Promise 实例,包装成一个新的 Promise 实例 Promise.all,接收一个数组作为参数,数组的每一项都返回Promise实例 我们重点看这段代码...为了是拉长接口三的返回时间我对接口三的数据进行了修改,返回值是长度1000-2000之间的随机数组,所以p3的执行要晚于p1p2, 但我们输出的arr,p3依然在前面,这给我们带来一个便利,返回值数组的顺序方法的执行顺序无关...,用法Promise.all类似,对应参数的要求和Promise.all相同,传入一个数组作为参数,参数要返回一个Promise实例 race就是竞争的意思,数组内的Promise实例,谁执行的快,就返回谁的执行结果...([p3, p4]) .then(res => console.log(res)) .catch(err => console.log(err)); p3的ajax50ms

2.3K30
领券