Browse Source

forEach 函数踩坑

kindring 4 years ago
parent
commit
36a83696f4
1 changed files with 36 additions and 0 deletions
  1. 36 0
      js/踩坑记录.md

+ 36 - 0
js/踩坑记录.md

@@ -0,0 +1,36 @@
+# js踩坑记录
+> 专门用来踩坑用
+1. 在foreach中await功能使用异常问题
+    1. 问题描述,在数组的 `forEach` 回调函数中使用 `await` 去进行数据处理时会出现任务同步被执行问题
+    2. 解决方法
+       1. 改造 `forEach` 函数
+            > 之间修改 forEach 函数,改造成async await形式的回调函数
+
+            ```
+            async function asyncForEach(array, callback) {
+                for (let index = 0; index < array.length; index++) {
+                    await callback(array[index], index, array)
+                }
+            }
+            ```
+       2. 使用原生的 `for` 循环去实现
+            > 改用 for in 或者是 for 等去实现
+    3. 问题原因
+       1. [mdn](https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Array/forEach) 网站解释
+            
+            `forEach` 函数等同于一个回调函数,如下面的代码示意
+
+            ```
+            Array.prototype.forEach = function (callback) {
+                // this represents our array
+                for (let index = 0; index < this.length; index++) {
+                    // We call the callback for each entry
+                    callback(this[index], index, this)
+                }
+            }
+
+            ```
+    4. 参考解决的文章
+     
+       抄袭来源 http://objcer.com/2017/10/12/async-await-with-forEach/
+