当我们 return 内部回调时 Javascript 映射的行为
Behavior of Javascript map when we return inside callback
我们通常在Javascript中使用"map"来得到一个新的和转换后的数组。在这种情况下是不同的。
这是一段来自 Service Worker 定义的代码。旨在删除旧缓存并仅保留最新版本。
我主要关注 "cacheNames.map" 内部发生的事情。因为,在某些时候,我们会输入"if"语句。基本上,当旧缓存已经存储时,新缓存将取代它。
我的问题是:
1- 当 "map" 正在使用的回调中有 "return" 语句时会发生什么?即 return caches.delete(缓存)
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);
}
})
)
})
回调内部和外部的行为相同。
map
returns 基于旧列表的新列表。映射函数中的 return
决定元素(在本例中为 cache
)被替换为什么。在使用 return
未显式返回任何内容的情况下,将隐式返回 undefined
。
不,return
对 map
的剩余迭代没有影响。同样,它只是决定新元素的值是什么。
我们通常在Javascript中使用"map"来得到一个新的和转换后的数组。在这种情况下是不同的。
这是一段来自 Service Worker 定义的代码。旨在删除旧缓存并仅保留最新版本。
我主要关注 "cacheNames.map" 内部发生的事情。因为,在某些时候,我们会输入"if"语句。基本上,当旧缓存已经存储时,新缓存将取代它。
我的问题是:
1- 当 "map" 正在使用的回调中有 "return" 语句时会发生什么?即 return caches.delete(缓存)
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);
}
})
)
})
回调内部和外部的行为相同。
map
returns 基于旧列表的新列表。映射函数中的 return
决定元素(在本例中为 cache
)被替换为什么。在使用 return
未显式返回任何内容的情况下,将隐式返回 undefined
。
不,return
对 map
的剩余迭代没有影响。同样,它只是决定新元素的值是什么。