html 获取多个文件
html fetch multiple files
我想使用新的提取功能 api (https://fetch.spec.whatwg.org/) 一次提取多个文件。原生有可能吗?如果是这样,我应该如何利用承诺?
var list = [];
var urls = ['1.html', '2.html', '3.html'];
var results = [];
urls.forEach(function(url, i) { // (1)
list.push( // (2)
fetch(url).then(function(res){
results[i] = res.blob(); // (3)
})
);
});
Promise
.all(list) // (4)
.then(function() {
alert('all requests finished!'); // (5)
});
这是未经测试的代码!此外,它依赖于Array.prototype.forEach
和ES6的新Promise
对象。这个想法是这样的:
- 遍历所有 URLs。
- 对于每个 URL,使用
fetch
API 获取它,将返回的承诺存储在 list
. 中
- 此外,当请求完成后,将结果存储在
results
。
- 创建一个新的承诺,当
list
中的所有承诺都已解决(即所有请求已完成)时解决。
- 享受人满为患
results
!
在 Kotlin 中实现 时,我将其缩减为:
fun fetchAll(vararg resources: String): Promise<Array<out Response>> {
return Promise.all(resources.map { fetch(it) }.toTypedArray())
}
这在 JavaScript 中大致翻译为:
function fetchAll(...resources) {
var destination = []
resources.forEach(it => {
destination.push(fetch(it))
})
return Promise.all(destination)
}
早些时候,我尝试使用 map
而不是 forEach
+ push
ing 到一个新数组,但由于某种原因根本行不通.
我想使用新的提取功能 api (https://fetch.spec.whatwg.org/) 一次提取多个文件。原生有可能吗?如果是这样,我应该如何利用承诺?
var list = [];
var urls = ['1.html', '2.html', '3.html'];
var results = [];
urls.forEach(function(url, i) { // (1)
list.push( // (2)
fetch(url).then(function(res){
results[i] = res.blob(); // (3)
})
);
});
Promise
.all(list) // (4)
.then(function() {
alert('all requests finished!'); // (5)
});
这是未经测试的代码!此外,它依赖于Array.prototype.forEach
和ES6的新Promise
对象。这个想法是这样的:
- 遍历所有 URLs。
- 对于每个 URL,使用
fetch
API 获取它,将返回的承诺存储在list
. 中
- 此外,当请求完成后,将结果存储在
results
。 - 创建一个新的承诺,当
list
中的所有承诺都已解决(即所有请求已完成)时解决。 - 享受人满为患
results
!
在 Kotlin 中实现
fun fetchAll(vararg resources: String): Promise<Array<out Response>> {
return Promise.all(resources.map { fetch(it) }.toTypedArray())
}
这在 JavaScript 中大致翻译为:
function fetchAll(...resources) {
var destination = []
resources.forEach(it => {
destination.push(fetch(it))
})
return Promise.all(destination)
}
早些时候,我尝试使用 map
而不是 forEach
+ push
ing 到一个新数组,但由于某种原因根本行不通.