![](/img/trans.png)
[英]I want a get a data from socket in nodejs. How can I get a data? ex)socket.room
[英]I fetch data from an API in postgress database using pg pool with Nodejs. I get data in 2D array each array is candle information
這是我收到的數據格式。
[
[
1627875900,
15874.9,
15876.9,
15834.65,
15847.05,
0
],
[
1627875960,
15847.05,
15853,
15838.7,
15853,
0
],
[
1627876020,
15854.25,
15861.85,
15853.6,
15861.05,
0
],
[
1627876080,
15860.35,
15862.85,
15856,
15859.4,
0
]
]
如果我使用循環來存儲它,那么由於異步,訂單會發生變化。 請在這個方向上幫助我如何將每個數組元素作為記錄進行存儲或存儲。
這是我的片段。
const newCandle = response.candles.map(async (element) => {
await pool.query(
`INSERT INTO nifty_50 (date, open, high, low, close) VALUES ('${element[0]}', '${element[1]}', '${element[2]}', '${element[3]}', '${element[4]}')`
);
});
您有兩種插入數據庫的選項:
function expand(rowCount, columnCount, startAt=1){
var index = startAt
return Array(rowCount).fill(0).map(v => `(${Array(columnCount).fill(0).map(v => `$${index++}`).join(", ")})`).join(", ")
}
// flatten([[1, 2], [3, 4]]) returns [1, 2, 3, 4]
function flatten(arr){
var newArr = []
arr.forEach(v => v.forEach(p => newArr.push(p)))
return newArr
}
const response = {
candles: [
[
1627875900,
15874.9,
15876.9,
15834.65,
15847.05,
0
],
[
1627875960,
15847.05,
15853,
15838.7,
15853,
0
]
]
};
const candles = response.candles.map((v) => ([v[0], v[1], v[2], v[3], v[4]]));
await pool.query(
`INSERT INTO nifty_50 (date, open, high, low, close) VALUES ${expand(candles.length, 5)}`,
flatten(candles),
);
await pool.query(
`INSERT INTO nifty_50 (date, open, high, low, close) SELECT t.data[i][1], t.data[i][2], t.data[i][3], t.data[i][4], t.data[i][5] FROM (SELECT $1::NUMERIC[][] AS data) t CROSS JOIN generate_series(1, array_length(t.data, 1)) i`,
[response.candles],
);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.