小天同学

Results 30 comments of 小天同学

`var promise = Promise.reject(new Error("message")); promise.catch(function (error) { console.error(error); });` 如果我们在各种浏览器中执行这段代码,那么在IE8及以下版本则会出现 identifier not found 的语法错误。 这是怎么回事呢? 实际上这和 catch 是ECMAScript的 保留字 (Reserved Word)有关。 在ECMAScript 3中保留字是不能作为对象的属性名使用的。 而IE8及以下版本都是基于ECMAScript 3实现的,因此不能将 catch 作为属性来使用,也就不能编写类似 `promise.catch()` 的代码,因此就出现了...

从代码上乍一看,` aPromise.then(...).catch(...) `像是针对最初的 aPromise 对象进行了一连串的方法链调用。 然而实际上不管是 then 还是 catch 方法调用,都返回了一个新的promise对象。

### Promise和数组 > 如果只有一个promise对象的话我们可以像前面介绍的那样编写代码就可以了,如果要在多个promise对象都变为FulFilled状态的时候才要进行某种处理话该如何操作呢? ``` javascript //通过回调方式来进行多个异步调用 function getURLCallback(URL, callback) { var req = new XMLHttpRequest(); req.open('GET', URL, true); req.onload = function () { if (req.status === 200) { callback(null,...

### Promise.all 上面promise与数组中为了在多个promise对象都变为FulFilled状态的时候才要进行某种处理,使用.then代码虽然比回调函数的方式更优,但是还不是最优的,因为在链式的使用.then使代码变得晦涩。下面看看Promise.all的处理方式。 ```javascript function getURL(URL) { return new Promise(function (resolve, reject) { var req = new XMLHttpRequest(); req.open('GET', URL, true); req.onload = function () { if (req.status === 200)...

```javascript function throwError(value) { // 抛出异常 throw new Error(value); } // onRejected不会被调用 function badMain(onRejected) { return Promise.resolve(42).then(throwError, onRejected); } // 有异常发生时onRejected会被调用 function goodMain(onRejected) { return Promise.resolve(42).then(throwError).catch(onRejected); } // 运行示例 badMain(function(){...

1. 使用promise.then(onFulfilled, onRejected) 的话:在 onFulfilled 中发生异常的话,在 onRejected 中是捕获不到这个异常的。 2. 在 promise.then(onFulfilled).catch(onRejected) 的情况下:then 中产生的异常能在 .catch 中捕获 3. .then 和 .catch 在本质上是没有区别的:需要分场合使用。

如何编写Promise的测试代码,Mocha对于promise的支持度很好: [Mocha对Promise的支持](http://liubin.org/promises-book/#mocha-promise)

至此,基本的promise概念,用法,特性都学习了解的差不多了。 高级用法有待实践过程中逐步研习。

@FourEyebrowXiake Promise 对象有以下两个特点。 (1)对象的状态不受外界影响。Promise 对象代表一个异步操作,有三种状态:Pending(进行中)、Resolved(已完成,又称 Fulfilled)和 Rejected(已失败)。只有异步操作的结果,可以决定当前是哪一种状态,任何其他操作都无法改变这个状态。这也是 Promise 这个名字的由来,它的英语意思就是「承诺」,表示其他手段无法改变。 (2)一旦状态改变,就不会再变,任何时候都可以得到这个结果。Promise 对象的状态改变,只有两种可能:从 Pending 变为 Resolved 和从 Pending 变为 Rejected。只要这两种情况发生,状态就凝固了,不会再变了,会一直保持这个结果。就算改变已经发生了,你再对 Promise 对象添加回调函数,也会立即得到这个结果。这与事件(Event)完全不同,事件的特点是,如果你错过了它,再去监听,是得不到结果的。 有了 Promise 对象,就可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。此外,Promise 对象提供统一的接口,使得控制异步操作更加容易。

更下~ 目前:《深入浅出nodejs 》大概看了1/3