我使用基本的fetch请求从服务器检索JSON文件,如下所示:
function getDailyTranscripts (url) {
fetch(url)
.then(validateResponse)
.then(readResponseAsJSON)
.then(useDailyResult)
.catch(logError)
}
这将检索一个主JSON文件,然后我将从该文件中创建变量,以便使用charts.js在单个html页面中填充多个图表
目前,我可以通过运行fetch函数中的useDailyResult()
函数中的代码来对单个图表执行此操作。但是,我需要对所有图表分别重复此模式,并使用当前的实现复制大量代码和服务器调用。
下面是我的一个图表的当前useDailyResult
函数的示例:
function useDailyResult (result) {
var labels = Object.keys(getUsersByChannel2(result))
var data = Object.values(getUsersByChannel2(result))
var ctx = document.getElementById('chartOops').getContext('2d');
var chart = new Chart(ctx, {
type: 'doughnut',
data: {
labels: labels,
datasets: [{
label: 'Channels',
data: data
}]
},
options: {
title: {
display: true,
text: 'Users by Channel'
},
legend: {
position: 'bottom'
},
scales: {
gridLines: {
display: false
}
},
plugins: {
colorschemes: {
scheme: chartColorScheme
}
}
}
});
}
我希望得到的最终结果是从服务器检索JSON文件一次,将其存储在本地(例如使用HTML5的本地存储),然后对本地存储的文件运行我的所有chartjs代码。这样我就可以减少代码和服务器调用的次数。
我不确定最好的方法是什么,因为我知道访问JSON文件的唯一方法是从fetch函数中访问。我也一直在考虑使用Backbone.js,因为这可能是一个有用的库。
2条答案
按热度按时间bhmjp9jg1#
如果将从服务器获取的数据赋给函数可以访问的变量,则可以重用这些数据。
如果你在你的链中有另一个
then
分配给一个var,那么你可以在执行另一个提取之前检查那个var。请注意,如果在初始获取仍在工作时再次调用
getDailyTranscripts
,它将启动另一次获取。因此,如果这对您来说可能是个问题,您可能需要添加一些逻辑来解决这个问题。最好的方法是:(1)读取远程数据,然后(2)将它传递沿着需要它的任何东西,如果你提前知道的话。
6mw9ycah2#
你可以通过多次调用
p.then
来告诉一个承诺p
在它可用时调用多个处理程序: