@@ -822,7 +822,7 @@ class Person {
822
822
> Reflect .ownKeys (person); // []
823
823
```
824
824
825
- 一个使用WeakMaps存储数据更实际的例子,就是有关于一个DOM元素和对该DOM元素(有污染)地操作 :
825
+ 一个使用WeakMaps存储数据更实际的例子,是存储与DOM元素相关联的数据,而这不会对DOM元素本身产生污染 :
826
826
827
827
``` javascript
828
828
let map = new WeakMap ();
@@ -841,16 +841,16 @@ el = null;
841
841
value = map .get (el); // undefined
842
842
```
843
843
844
- 上面的例子中,一个对象被垃圾回收期给销毁了,WeakMaps会自动的把自己内部所对应的键值对数据同时销毁 。
844
+ 上面的例子中,一旦对象被垃圾回收器给销毁了,WeakMaps会自动的把这个对象所对应的键值对数据同时销毁 。
845
845
846
- > ** 提示** :结合这个例子,再考虑下jQuery是如何实现缓存带有引用的DOM元素这个功能的,使用了WeakMaps的话 ,当被缓存的DOM元素被移除的时,jQuery可以自动释放相应元素的内存。
847
- 通常情况下,在涉及DOM元素存储和缓存的情况下,使用WeakMaps是非常适合的 。
846
+ > ** 提示** :结合这个例子,再考虑下jQuery是如何实现缓存带有引用的DOM元素这个功能的。使用WeakMaps的话 ,当被缓存的DOM元素被移除的时,jQuery可以自动释放相应元素的内存。
847
+ 通常情况下,在涉及DOM元素存储和缓存的情况下,使用WeakMaps是非常有效的 。
848
848
849
849
<sup >[ (回到目录)] ( #table-of-contents ) </sup >
850
850
851
851
## Promises
852
852
853
- Promises让我们让我们多缩进难看的代码 (回调地狱):
853
+ Promises让我们把多缩进难看的代码 (回调地狱):
854
854
855
855
``` javascript
856
856
func1 (function (value1 ) {
@@ -889,40 +889,51 @@ new Promise((resolve, reject) =>
889
889
890
890
这里有两个处理函数,** resolve** (当Promise执行成功完毕时调用的回调函数) 和 ** reject** (当Promise执行不接受时调用的回调函数)
891
891
892
- > ** Promises的好处** :大量嵌套错误回调函数会使代码变得难以阅读理解 。
893
- 使用了Promises,我们可以让我们代码变得更易读,组织起来更合理 。
894
- 此外,Promise处理后的值,无论是解决还是拒绝的结果值 ,都是不可改变的。
892
+ > ** Promises的好处** :大量嵌套错误处理回调函数会使代码变得难以阅读理解 。
893
+ 使用Promises,我们可以通过清晰的路径将错误事件让上传递,并且适当地处理它们 。
894
+ 此外,Promise处理后的值,无论是解决(resolved)还是拒绝(rejected)的结果值 ,都是不可改变的。
895
895
896
896
下面是一些使用Promises的实际例子:
897
897
898
898
``` javascript
899
- var fetchJSON = function (url ) {
900
- return new Promise ((resolve , reject ) => {
901
- $ .getJSON (url)
902
- .done ((json ) => resolve (json))
903
- .fail ((xhr , status , err ) => reject (status + err .message ));
904
- });
905
- };
899
+ var request = require (' request' );
900
+
901
+ return new Promise ((resolve , reject ) => {
902
+ request .get (url, (error , response , body ) => {
903
+ if (body) {
904
+ resolve (JSON .parse (body));
905
+ } else {
906
+ resolve ({});
907
+ }
908
+ });
909
+ });
906
910
```
907
911
908
- 我们还可以使用 ` Promise.all() ` 来异步的 ** 并行 ** 处理一个数组的数据 。
912
+ 我们还可以使用 ` Promise.all() ` 来 ** 并行化 ** 的处理一组异步的操作 。
909
913
910
914
``` javascript
911
- var urls = [
912
- ' http://www.api.com/items/1234' ,
913
- ' http://www.api.com/items/4567'
915
+ let urls = [
916
+ ' /api/commits' ,
917
+ ' /api/issues/opened' ,
918
+ ' /api/issues/assigned' ,
919
+ ' /api/issues/completed' ,
920
+ ' /api/issues/comments' ,
921
+ ' /api/pullrequests'
914
922
];
915
923
916
- var urlPromises = urls .map (fetchJSON);
924
+ let promises = urls .map ((url ) => {
925
+ return new Promise ((resolve , reject ) => {
926
+ $ .ajax ({ url: url })
927
+ .done ((data ) => {
928
+ resolve (data);
929
+ });
930
+ });
931
+ });
917
932
918
- Promise .all (urlPromises)
919
- .then (function (results ) {
920
- results .forEach (function (data ) {
921
- });
922
- })
923
- .catch (function (err ) {
924
- console .log (' Failed: ' , err);
925
- });
933
+ Promise .all (promises)
934
+ .then ((results ) => {
935
+ // Do something with results of all our promises
936
+ });
926
937
```
927
938
928
939
<sup >[ (回到目录)] ( #table-of-contents ) </sup >
0 commit comments