【问题标题】:Behavior of Javascript map when we return inside callback当我们在回调内部返回时 Javascript 映射的行为
【发布时间】:2019-01-31 16:44:26
【问题描述】:

我们通常在 Javascript 中使用“map”来获取一个新的和转换后的数组。在这种情况下是不同的。
这是来自 Service Worker 定义的一段代码。它旨在删除旧缓存并仅保留最新版本。

我主要关注“cacheNames.map”内部发生的事情。因为,在某个时候,我们将输入“if”语句。基本上,当一个旧的缓存已经被存储时,一个新的缓存就会取而代之。

我的问题是:
1-当“map”正在使用的回调中有“return”语句时会发生什么?即返回 caches.delete(cache)
2- 第一次执行“return”时剩余的迭代会停止吗?

caches.keys().then(cacheNames => {
  return Promise.all(
    cacheNames.map(cache => {
      if (cache !== cacheName) {
        console.log('Service Worker: Clearing Old Cache');
        return caches.delete(cache);
      }
    })
  )
})

【问题讨论】:

  • "我们通常在 Javascript 中使用 "map" 来获得一个新的和转换后的数组" - 所以你在这里做。该数组被转换为undefineds 数组(当回调没有返回任何内容时)和删除承诺。
  • 我怀疑这两个问题都可以通过尝试运行代码(或类似代码)来回答。
  • "当您在“map”使用的回调中包含“return”语句时会发生什么?" - 您似乎知道map 的工作原理(用于转换数组)已经,所以你不应该自己回答这个问题吗?或者是什么让您认为它在这里的工作方式会有所不同?
  • 谢谢大家。我现在知道了。在这种情况下,我们不会像在基本使用中那样保留新的转换数组。我们只是使用“map”的“迭代”功能来检查键数组中是否满足条件。非常感谢您的超快速响应。
  • @jet2016 不,您不只是使用迭代功能。您还可以将新转换的数组用作Promise.all 的参数,这很重要。使用例如forEach 不会起作用。

标签: javascript array.prototype.map


【解决方案1】:

回调内部或外部的行为是相同的。

map 基于旧列表返回一个新列表。映射函数内部的return 决定了元素(在这种情况下为cache)被替换为什么。在使用return 未显式返回任何内容的情况下,将隐式返回undefined。

不,return 对map 的剩余迭代没有影响。同样,它只是决定新元素的值是什么。

【讨论】:

    猜你喜欢
    • 2023-04-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-06
    • 2014-08-26
    • 2018-07-27
    • 2010-09-05
    • 2018-08-19
    • 2022-12-20
    相关资源
    最近更新 更多