还是大剑师兰特:曾是美国某知名大学计算机专业研究生,现为航空航海领域高级前端工程师;优快云知名博主,GIS领域优质创作者,深耕openlayers、leaflet、mapbox、cesium,canvas,webgl,echarts等技术开发,欢迎加底部微信(gis-dajianshi),一起交流。
No. | 大剑师精品GIS教程推荐 |
---|---|
0 | 地图渲染基础- 【WebGL 教程】 - 【Canvas 教程】 - 【SVG 教程】 |
1 | Openlayers 【入门教程】 - 【源代码+示例 300+】 |
2 | Leaflet 【入门教程】 - 【源代码+图文示例 150+】 |
3 | MapboxGL 【入门教程】 - 【源代码+图文示例150+】 |
4 | Cesium 【入门教程】 - 【源代码+综合教程 200+】 |
5 | threejs 【中文API】 - 【源代码+图文示例200+】 |
6 | Shader 编程 【图文示例 100+】 |
7 | Geoserver 【配置教程 100+】 |
8 | 卫星应用开发教程 【配置+应用教程 100+】 |
9 | GIS数字孪生与大模型 【应用实战 100+】 |
10 | 报表与数字大屏 【Echarts 实战示例】 - 【D3 综合教程】 - 【其他大屏】 |
Promise.all()
是 JavaScript 中 Promise
对象的一个静态方法,它接收一个可迭代对象(通常是一个 Promise 对象数组),并返回一个新的 Promise 实例。当传入的 Promise 都变为 fulfilled(已成功)状态时,返回的新 Promise 也会 fulfilled,其结果是一个数组,包含了各个 Promise 成功的结果;但如果传入的 Promise 中有任何一个变为 rejected(已失败)状态,那么返回的新 Promise 立即变为 rejected 状态,并返回第一个被 reject 的 Promise 的拒绝原因。
一、作用
- 并发执行多个异步操作并在所有操作都成功时获取所有结果。
- 快速失败(fail-fast)机制,任何一个 Promise 失败则整体失败。
- 可以用来协调多个异步任务,使得它们能够有序且同时完成。
二、应用场景
- 数据的批量获取:例如从不同 API 下载多个资源,只有当所有资源都下载完成后才执行下一步操作。
- 登录时验证用户名和密码同时是否有效。
- 在多个异步依赖项都满足时初始化应用或模块。
三、代码示例
// 示例1:获取多个异步结果
let promise1 = fetch('https://api.example.com/data1');
let promise2 = fetch('https://api.example.com/data2');
let promise3 = fetch('https://api.example.com/data3');
Promise.all([promise1, promise2, promise3])
.then(responses => Promise.all(responses.map(r => r.json()))) // 先将响应转成 JSON 格式
.then(dataArrays => {
// dataArrays 是一个数组,包含了三个 API 调用的结果
let [data1, data2, data3] = dataArrays;
console.log(data1, data2, data3);
})
.catch(error => {
// 如果任何一项请求失败,这里会捕获到错误
console.error('至少有一个请求失败:', error);
});
// 示例2:并发读取多个文件
let readFilePromises = ['file1.txt', 'file2.txt', 'file3.txt'].map(fileName =>
fs.promises.readFile(fileName, 'utf8')
);
Promise.all(readFilePromises)
.then(contents => {
// contents 是一个包含文件内容的数组
for (const content of contents) {
console.log(content);
}
})
.catch(err => {
console.error('读取文件时出错', err);
});
在这个例子中,Promise.all
保证了所有文件读取操作都是并发进行的,并且只有当所有文件都成功读取完毕,才会执行 .then
中的回调函数。如果其中任意一个文件读取失败,.catch
中的回调函数会被调用。