【发布时间】:2018-09-07 03:16:45
【问题描述】:
我使用 d3.js v4 已经有一段时间了,我了解到 Mike Bostock 已将 v5 版本中的 d3.queue 替换为 Promise 本机 JavaScript 对象。我想检查一下我编写的这段代码是否正确地(异步)排队这些 URL:
var makeRequest = function() {
"use strict";
var bli = [
"http://stats.oecd.org/sdmx-json/data/BLI2013/all/all",
"http://stats.oecd.org/sdmx-json/data/BLI2014/all/all",
"http://stats.oecd.org/sdmx-json/data/BLI2015/all/all",
"http://stats.oecd.org/sdmx-json/data/BLI2016/all/all",
"http://stats.oecd.org/sdmx-json/data/BLI/all/all"
];
var promises = [];
bli.forEach(function(url) {
promises.push(
new Promise(function(resolve, reject) {
d3
.json(url)
.then(function(response) {
resolve(response);
})
.catch(function(error) {
console.log("Error on: " + url + ". Error: " + error);
reject(error);
});
})
);
});
Promise.all(promises).then(function(values) {
console.log(values);
});
};
makeRequest();
代码似乎运行正常,但是,这是正确的代码还是有更好的方法(最佳实践方法)用于使用 Promise.all 和 d3.js 进行排队?是否正确执行了 catch 错误?
【问题讨论】:
-
我刚刚回滚了这个问题,删除了
d3v5标签。致编辑,请阅读:meta.stackoverflow.com/a/338840/5768908。我们在删除d3v4标签方面做了大量工作,显然这个过程将从这个新的d3v5标签重新开始!这是建议的操作:问题应该只有d3.js 标签,无论版本如何。然后,如果问题特定于给定版本,则 OP 必须在标题或问题正文上指定版本。