// 切换商品
watch(
() => currencyInfo.value.symbol,
(n, j) => {
widget.onChartReady(async () => {
await widget.activeChart().setSymbol(n);
widget.activeChart().setVisibleRange(widget.activeChart().getVisibleRange(), {
applyDefaultRightMargin: true,
percentRightMargin: true
});
});
}
);
// 更新实时k线
watch(
() => userkline.realTimeKline,
async (n, j) => {
if (n && typeof realtimeCallback.value === "function" && typeof widget.onChartReady === "function") {
widget.onChartReady(async () => {
await realtimeCallback.value(n);
});
}
},
{ deep: true }
);
tradingview 切换商品 会出现历史数据于实时k线不符的情况a历史+b实时,只是最后一条历史k线
【以下回答由 GPT 生成】
根据提供的代码和问题描述,导致历史数据与实时K线不匹配的原因可能是由于异步操作引起的。为了解决这个问题,我建议对代码进行一些修改,以确保正确的顺序和正确的数据被加载和更新。
首先,在切换商品时,我们需要确保当前的商品数据加载完成后再更新可见范围。为此,可以使用Promise
来实现。
// 创建一个 Promise 对象
function setSymbolPromise(symbol) {
return new Promise((resolve) => {
widget.onChartReady(() => {
widget.activeChart().setSymbol(symbol, () => {
resolve(); // 标记 Promise 完成
});
});
});
}
// 监听商品切换
watch(
() => currencyInfo.value.symbol,
async (n, j) => {
await setSymbolPromise(n); // 等待商品切换完成
widget.activeChart().setVisibleRange(widget.activeChart().getVisibleRange(), {
applyDefaultRightMargin: true,
percentRightMargin: true
});
}
);
接下来,我们需要确保实时K线数据在商品切换后再进行更新。可以使用async/await
来确保正确的顺序。
// 更新实时K线
watch(
() => userkline.realTimeKline,
async (n, j) => {
if (n && typeof realtimeCallback.value === "function" && typeof widget.onChartReady === "function") {
await setSymbolPromise(currencyInfo.value.symbol); // 等待商品切换完成
await realtimeCallback.value(n);
}
},
{ deep: true }
);
通过这些修改,我们可以确保实时K线数据的更新发生在正确的商品切换后,并且历史数据和实时K线数据能够匹配。
希望这些修改能帮助解决你的问题,如果还有其他问题,请随时提问。