gpt4 book ai didi

javascript - 如何在 ionic 中使用异步数据与 chart.js 一起使用

转载 作者:行者123 更新时间:2023-11-30 06:16:02 25 4
gpt4 key购买 nike

我正在通过 api 为我正在制作的 ionic 应用程序调用一些数据。数据被异步调用,我需要将数据分配给不同的变量,以便在呈现给用户的图表中使用。我正在努力将数据分配给一个变量,然后我可以从创建图表的函数访问该变量(我正在使用 chart.js)。最初,我一直试图从数据中获取日期列表以用作 X 轴刻度,只是为了让事情正常进行。

一直在尝试很多事情,但都失败了。我最初认为这是因为我的变量是 block 范围的,但现在我认为这是一个异步问题。几个小时以来一直在阅读有关 promises 的内容,但尽管我理解这个概念,但我无法将其应用到我当前的代码中(假设问题是异步的!我是这里的自学任务的菜鸟)。

这是处理从 api 中提取数据的代码

async getData() {
const loading = await this.loadingController.create({
message: 'Loading'
});
await loading.present();
this.api.getData()
.subscribe(res => {
console.log(res);
this.data1 = res[0];
loading.dismiss();
console.log(this.data1);

const datelabel = this.data1.result[1].date;

}, err => {
console.log(err);
loading.dismiss();
});

}

这是创建图表的代码

useAnotherOneWithWebpack() {

var ctx = (<any>document.getElementById('canvas-linechart')).getContext('2d');
console.log('GotData', this.datelabel); //just to see what data I've got here if any in the console

var chart = new Chart(ctx, {
// The type of chart we want to create
type: 'line',

// The data for our dataset
data: {
labels: this.datelabel,
datasets: [{
data: [86,114,106],
label: "Africa",
borderColor: "#3e95cd",
fill: false
}, {
data: [282,350,411],
label: "Asia",
borderColor: "#8e5ea2",
fill: false
}, {
data: [168,170,178],
label: "Europe",
borderColor: "#3cba9f",
fill: false
}
]
},
options: {
title: {
display: true,
text: 'World population per region (in millions)'
}
}
});

}

所以我针对标签调用数据标签变量,但它在轴和控制台中显示为未定义。我期待看到三个月(在变量中保存为字符串)。现在尝试了各种方法,这让我有点发疯。我什至不确定它是一个异步问题,但从我到目前为止所做的来看,它感觉像是问题所在。

非常感谢任何帮助!!

最佳答案

不确定您何时何地调用 useAnotherOneWithWebpack() 方法,但您的代码中的一个问题是您正在为 local 常量分配一些值 datelabel 但不是来自组件的属性:

// The following line just creates a local const available only in that scope
const datelabel = this.data1.result[1].date;

相反,您应该初始化组件的属性:

this.datelabel = this.data1.result[1].date;

记住这一点,请尝试以下操作:

async getData() {

const loading = await this.loadingController.create({
message: 'Loading'
});

await loading.present();

this.api.getData().subscribe(
res => {

// This line will be executed when getData finishes with a success response
console.log('Inside of the subscribe - success');

console.log(res);

this.data1 = res[0];
this.datelabel = this.data1.result[1].date;

// Now that the data is ready, you can build the chart
this.useAnotherOneWithWebpack();

loading.dismiss();

},
err => {

// This line will be executed when getData finishes with an error response
console.log('Inside of the subscribe - error');

console.log(err);

loading.dismiss();
});


// This line will be executed without waiting for the getData async method to be finished
console.log('Outside of the subscribe');

}

关于javascript - 如何在 ionic 中使用异步数据与 chart.js 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56097363/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com