了解D3中的承诺

时间:2019-08-06 17:45:42

标签: javascript d3.js es6-promise

我才刚刚开始理解诺言。我知道您可以使用以下内容来处理d3.csv('https://url.com').then(d => handle(d))。但是,我遇到了下面的示例,我很难理解每个部分的作用。有人可以解释吗?

编辑: 我了解Promise.all确实“传递了一组诺言,并且仅在所有这些诺言得到解决或其中一个诺言被拒绝后才触发函数。”

此示例摘自D3.Js in Action中的Listing 7.4. The adjacency matrix function

var PromiseWrapper = d => new Promise(resolve => d3.csv(d, p => resolve(p))); // part1


      Promise
        .all([
          PromiseWrapper("../data/nodelist.csv"),
          PromiseWrapper("../data/edgelist.csv")
        ]) //part2
        .then(resolve => {
          createAdjacencyMatrix(resolve[0], resolve[1]);
        }); //part3

编辑: 要合并d3v5 d3-fetch,以下正确吗?

//ver1
const promise1 = d3.csv('../data/nodelist.csv')
const promise2 = d3.csv('../data/nodelist.csv')

Promise.all([promise1, promise2]).then(resolve => 
   createAdjacencyMatrix(resolve[0], resolve[1]));

还是我需要执行以下操作?

//ver2
const promise1 = d3.csv('../data/nodelist.csv').then(d => d)
const promise2 = d3.csv('../data/nodelist.csv').then(d => d) 

Promise.all([promise1, promise2]).then(resolve => 
   createAdjacencyMatrix(resolve[0], resolve[1]));

ver1ver2有什么区别?

1 个答案:

答案 0 :(得分:0)

A返回一个诺言。

Promise.all将所有这些promise放在一个数组中,并返回一个promise,当所有promise都解决后,将予以解决。

PromiseWrapper("../data/nodelist.csv")