Array.filter 过滤器出错:Async / Await中的冒险 [转译]

2019年6月24日17:01:55 发表评论 暂未收录

正如在软件开发中经常发生的那样,我有一些部分完成的Node.js脚本代码交给我,其中包含对我要接收和完成的现有逻辑的增强。我继续添加剩下的所需更改,以便可以测试代码。事情开始变得腥了。这是一项数据处理工作,所以我不知道它需要多长时间或者要求多大。我开始了,认为可能需要几秒钟或几分钟才开始浏览网页。我的MacBook听起来像是一架商用客机。网站没有开放。应用程序变慢了。有些事情是非常错误的。这个剧本怎么这么苛刻?

我停止了工作并开始调查。没有什么不合适的地方。我几乎没有添加任何内容。我又跑了 一样。我尝试改变我添加的逻辑。没运气。所以,我做了你想做的事情,我删除了更改并测试了原始版本。似乎很好。这可能是什么?我给出的附加代码出了什么问题?它没有太多。从数据库中获取一些数据。用标准过滤器操纵它。调用异步方法并等待它... Async / await。是不是在等?为什么不等呢?哦,不......这是一个错误。

以下是对代码中发生的变化以及最终启示的一般重构。

场景#1:给定一个对象数组,过滤到一个子集:

const values = [1, 2, 1, 2, 1, 2, 1, 2, 2, 2];
const results = values.filter(value => {
  return value == 1;
});

console.log(results);

输出: