如何在module.exports函数中使用d3返回数据?

时间:2018-05-17 20:14:33

标签: javascript d3.js

我正在尝试使用d3.json函数内的module.exports模块读取json文件。

我想在调用module.exports文件后返回数据。

我试过了:

const d3 = require('d3')
module.exports = () => {
  let jsonfile = 'link/to/json/file.json'
  d3.json(jsonfile, (err, data) => {
    if (err) {
      throw err
    }
    return data
  }
}

调用此模块文件后,出现undefined错误。所以我在这段代码中添加了一些更改。

首先我在d3.json函数

之外定义了一个变量
const d3 = require('d3')
module.exports = () => {
  let out;
  let jsonfile = 'link/to/json/file.json'
  d3.json(jsonfile, (err, data) => {
    if (err) {
      throw err
    }
    out = data
  }
  return out
}

输出也是undefined

其次,我在调用module.exports文件后尝试使用de inner function d3.json

File A

const d3 = require('d3')
module.exports = () => {
  let jsonfile = 'link/to/json/file.json'
  this.out = d3.json(jsonfile, (err, data) => {
    if (err) {
      throw err
    }
    out = data
  }
  return out
}

但是,我使用最后一个方法得到了一个TypeError。

如何在调用module.exports文件后从d3.json返回数据?

1 个答案:

答案 0 :(得分:2)

您可以导出一个返回承诺的承诺或函数:

const d3 = require('d3')
module.exports = (file) => new Promise((resolve, reject) => {
  d3.json(file, (err, data) => {
    if (err) {
      reject(err)
    } else {
      resolve(data)
    }
 })

在您的其他档案中

jsonPromise('link/to/json/file.json').then(data => {
  // data available here
})