为ES2015解构干杯

我认为ES2015解构语法相当酷炫。他虽然没有像Promises,Generators以及Class语法那么上镜头,但是我发现它非常有用。你也可以阅读这里里面非常详细讲解了它。
唯一的遗憾是,大部分的例子我发现仅仅关注语法层面,而不是实际应用当中。像这个从MDN文档中的取的例子:

var a, b;
[a, b] = [10, 20];
console.log(a); // 10
console.log(b); // 20

幸运的是我有一些真实场景使用解构语法案例给你们分享!

保持Promises化

一个我最喜欢使用解构的是当使用Promise.all等待一系列异步任务全部完成时候。Promise.all返回值是以数组形式返回,而我们一般迭代数组取出里面的值,根据自己的需要才能操作这些值。
但是如果你知道使用解构获取你期望的对象,会让你的生活变得轻松和代码变得更漂亮,更多的描述性的命名参数。请看一个例子

啤酒比较

比方说你要比较两个brewDog的美味啤酒什么的,有时候我发现在现实生活中一直做这种事情。我们可以从sam Mason的美妙的Punk API获取关于啤酒信息。我们通过fetchAPI从上面API获取不同啤酒数据。我们比较啤酒℃之前,我们需要先发起这两个请求。
让我们一起先看下代码:

const punkAPIUrl = "https://api.punkapi.com/v2/beers/106";
  const deadPonyClubUrl = "https://api.punkapi.com/v2/beers/91";
  const punkAPIPromise = fetch(punkAPIUrl)
    .then(res => res.json())
    .then(data => data[0]);
  const deadPonyClubPromise = fetch(deadPonyClubUrl)
    .then(res => res.json())
    .then(data => data[0]);

  Promise.all([punkAPIPromise, deadPonyClubPromise])
    .then(beers => {
      const punkIPA = beers[0];
      const deadPonyClub = beers[1];
      const stronger = (punkIPA.abv < deadPonyClub.abv ? deadPonyClub.name : punkIPA.name) + " is stronger";
      console.log(stronger);
    });

我们使用参数解构整理一下Promise

 Promise.all([punkAPIPromise, deadPonyClubPromise])
    .then(([punkIPA, deadPonyClub]) => {
      const stronger = (punkIPA.abv < deadPonyClub.abv ? deadPonyClub.name : punkIPA.name) + " is stronger";
      console.log(stronger);
    });

我们知道我们获取两个啤酒的结果,这个例子的结构让我知道那个啤酒的结果是那个啤酒的,所以我们可以使用解构参数来命名,而不是通过数组来提取他们。

更多例子

好吧,这可能仍然是一个弥补的例子,但它肯定更接近现实生活。第一次,我发现自己使用这种技术是在写Service Workers for 12 Devs of Christmas这篇文章的时候。它写得很方便,当returnFromCacheOrFetch使用cachesfetchAPI 实现“stale while revalidate”缓存方法。
该方法执行缓存方法,并尝试将当前请求与缓存匹配。在返回之前,它然后启动对fetch请求的资源的请求,缓存结果。最后,如果在缓存中找到请求,则返回缓存的响应,否则返回新的获取请求。你可以在原始的博客文章中阅读更多。
最终代码如下:

function returnFromCacheOrFetch(request, cacheName) {
  const cachePromise = caches.open(cacheName);
  const matchPromise = cachePromise
    .then((cache) => cache.match(request));

  // Use the result of both the above Promises to return the Response. Promise.all returns an array, but we destructure that in the callback.
  return Promise.all([cachePromise, matchPromise])
    .then(([cache, cacheResponse]) => {
      // Kick off the update request
      const fetchPromise = fetch(request)
        .then((fetchResponse) => {
          // Cache the updated file and then return the response
          cache.put(request, fetchResponse.clone());
          return fetchResponse;
        });
      // return the cached response if we have it, otherwise the result of the fetch.
      return cacheResponse || fetchPromise;
    });
}

在这种情况下,我需要caches.open和cache.match(request)的结果为了执行背景提取和返回缓存的响应。我使用Promise.all和绘制结果数组保持代码整齐和描述性一起绘制他们。

命名这件事

在这些示例中,参数解构允许我们在Promise.all命名我们期望从解决的Promise传递给我们的结果。事实上,在任何地方我们使用参数解构,特别是数组,它允许我们早期和更具描述性地命名对象。这反过来使得代码更可读性和更长久的可维护性。

原文:https://philna.sh/blog/2017/02/09/toast-to-es2015-destructuring/?utm_source=javascriptweekly&utm_medium=email

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 161,601评论 4 369
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 68,367评论 1 305
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 111,249评论 0 254
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,539评论 0 217
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,967评论 3 295
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,929评论 1 224
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 32,098评论 2 317
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,825评论 0 207
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,609评论 1 249
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,796评论 2 253
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,282评论 1 265
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,603评论 3 261
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,277评论 3 242
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,159评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,959评论 0 201
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 36,079评论 2 285
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,874评论 2 277

推荐阅读更多精彩内容