Маркеры не отображаются. Функция setMarkers() возвращает TypeError: t.map не является функцией
Я просмотрел документацию на github, но больше не нашел по маркерам. Вот пример, который они приводят: https://github.com/tradingview/lightweight-charts/blob/ef8cfa40cb51ee1f9a5c11bd099bc510c022b010/docs/series-basics.md
Кажется, у меня есть правильный массив маркеров, но не повезло.
async function getCandle() {
while(true){
await fetch('localhost:5000/candle.json')
.then(res => res.text())
.then(data => {
/* Handling of data */
candleSeries.setMarkers(getMarkers()); // returns TypeError: t.map is not a function at i.t.setMarkers
// chart.setMarkers(getMarkers()); returns TypeError: chart.setMarkers is not a function
})
await sleep(1000);
}
}
async function getMarkers(){
await fetch('http://localhost:5000/markers.jsonl')
/* markers.jsonl looks like this:
{"time": 1592913600, "position": "belowBar", "shape": "arrowUp", "color": "green", "id": 1, "text": "BUY"}
{"time": 1592913900, "position": "belowBar", "shape": "arrowUp", "color": "green", "id": 1, "text": "BUY"}
*/
.then(res => res.text())
.then(data => {
data = data.split("\n");
let markers = data.map(d => {
// Parse d from string to JSON
d = JSON.parse(d);
return {time: d["time"], position: d["position"], shape: d["shape"], color: d["color"], id: d["id"], text: d["text"]}
});
return markers;
})
}
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
1 ответ
Решение
getMarkers
асинхронная функция, которая возвращает Promise
например, если вы не await
Это.
Вам нужно пометить обработчик данных как async
функция и await getMarkers
результат:
async function getCandle() {
while(true){
await fetch('localhost:5000/candle.json')
.then(res => res.text())
.then(async (data) => {
/* Handling of data */
candleSeries.setMarkers(await getMarkers());
})
await sleep(1000);
}
}
EDIT (из комментария @Nipheris): вы ничего не возвращаете изgetMarkers
функция, поэтому вам нужно добавить return
заявление там.