【发布时间】: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