如何让 npm pack "highcharts-export-server" 等待它完成处理
How do I make npm pack "highcharts-export-server" wait for it to finish processing
我是 javascript 和 node.js 的新手,我正在尝试使用 "highcharts-export-server" 来获取图表作为 base64 字符串。这是我的 highchartstest.js 文件:
const chartExporter = require("highcharts-export-server");
var chartBase64 = null;
function ProcessChart() {
chartExporter.initPool(); // Initialize the exporter
const chartDetails = {
type: 'png',
options: {
title: {
text: 'My Chart'
},
xAxis: {
categories: ["Jan", "Feb", "Mar", "Apr", "Mar", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
},
series: [{
type: 'line',
data: [1, 3, 2, 4]
},
{
type: 'line',
data: [5, 3, 4, 2]
}
]
}
};
chartExporter.export(chartDetails, (err, res) => {
chartBase64 = new Buffer.from(res.data, 'base64');
//console.log(chartBase64);
chartExporter.killPool();
return chartBase64;
});
}
module.exports.ProcessChart = ProcessChart;
我有另一个名为 test.js 的文件,其中包含以下代码:
var charts = require('./highchartsTest');
var chartBase = charts.ProcessChart();
console.log(chartBase);
如果我 运行 node test.js
我在控制台中得到的结果是 undefined
。
如果我在 highchartstest.js
中取消注释 console.log(chartBase64);
,我可以看到我得到了一个结果。有人可以帮我弄清楚如何在我调用 var chartBase = charts.ProcessChart();
时等待处理完成吗
您收到的未定义不是来自导出函数的回调。接收正确的 base64 字符串的最简单方法是向 ProcessChart 函数添加一个参数,该函数是在调用 killPool 后触发的回调。代码可能如下所示:
(highcharts-test.js)
const chartExporter = require('highcharts-export-server');
const ProcessChart = callback => {
chartExporter.initPool(); // Initialize the exporter
const chartDetails = {
type: 'png',
options: {
title: {
text: 'My Chart'
},
xAxis: {
categories: ['Jan', 'Feb', 'Mar', 'Apr', 'Mar', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
},
series: [{
type: 'line',
data: [1, 3, 2, 4]
}, {
type: 'line',
data: [5, 3, 4, 2]
}]
}
};
chartExporter.export(chartDetails, (err, res) => {
if (res) {
chartExporter.killPool();
callback(res.data);
}
});
}
module.exports.ProcessChart = ProcessChart;
(test.js)
const exporter = require('./highcharts-test.js');
const ProcessChart = exporter.ProcessChart;
ProcessChart(base64 => {
console.log(base64);
process.exit();
});
我是 javascript 和 node.js 的新手,我正在尝试使用 "highcharts-export-server" 来获取图表作为 base64 字符串。这是我的 highchartstest.js 文件:
const chartExporter = require("highcharts-export-server");
var chartBase64 = null;
function ProcessChart() {
chartExporter.initPool(); // Initialize the exporter
const chartDetails = {
type: 'png',
options: {
title: {
text: 'My Chart'
},
xAxis: {
categories: ["Jan", "Feb", "Mar", "Apr", "Mar", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]
},
series: [{
type: 'line',
data: [1, 3, 2, 4]
},
{
type: 'line',
data: [5, 3, 4, 2]
}
]
}
};
chartExporter.export(chartDetails, (err, res) => {
chartBase64 = new Buffer.from(res.data, 'base64');
//console.log(chartBase64);
chartExporter.killPool();
return chartBase64;
});
}
module.exports.ProcessChart = ProcessChart;
我有另一个名为 test.js 的文件,其中包含以下代码:
var charts = require('./highchartsTest');
var chartBase = charts.ProcessChart();
console.log(chartBase);
如果我 运行 node test.js
我在控制台中得到的结果是 undefined
。
如果我在 highchartstest.js
中取消注释 console.log(chartBase64);
,我可以看到我得到了一个结果。有人可以帮我弄清楚如何在我调用 var chartBase = charts.ProcessChart();
您收到的未定义不是来自导出函数的回调。接收正确的 base64 字符串的最简单方法是向 ProcessChart 函数添加一个参数,该函数是在调用 killPool 后触发的回调。代码可能如下所示:
(highcharts-test.js)
const chartExporter = require('highcharts-export-server');
const ProcessChart = callback => {
chartExporter.initPool(); // Initialize the exporter
const chartDetails = {
type: 'png',
options: {
title: {
text: 'My Chart'
},
xAxis: {
categories: ['Jan', 'Feb', 'Mar', 'Apr', 'Mar', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
},
series: [{
type: 'line',
data: [1, 3, 2, 4]
}, {
type: 'line',
data: [5, 3, 4, 2]
}]
}
};
chartExporter.export(chartDetails, (err, res) => {
if (res) {
chartExporter.killPool();
callback(res.data);
}
});
}
module.exports.ProcessChart = ProcessChart;
(test.js)
const exporter = require('./highcharts-test.js');
const ProcessChart = exporter.ProcessChart;
ProcessChart(base64 => {
console.log(base64);
process.exit();
});