如何在 javascript 中连续合并并查询区块链数据
How to incorporate continiously over a loop and querying of blockchain data in javascript
我是 javascript 的新手,正在尝试查询一些区块链数据。我只查询一次就可以成功查询数据。
但我想连续。
当我使用 while 循环 尝试连续 运行 查询时,它没有检索到任何数据。
我试过使用范围为 100 的 for 循环,发现它似乎要等到找到所有 100 个数据点才返回。
我假设它正在做与我的 while 循环类似的事情,因此不会返回任何东西,因为它是无限的。我在 python 中完成了此操作,但在 javascript 中似乎有问题。
我的代码如下。
const { LCDClient } = require('@terra-money/terra.js');
const terra = new LCDClient({
//URL: 'https://bombay-lcd.terra.dev',
//chainID: 'bombay-12',
URL: 'https://lcd.terra.dev',
chainID: 'columbus-5'
});
const contract = 'terra1a8k3jyv3wf6k3zngza5h6srrxcckdf7zv90p6u';
const pair_address = 'terra19l0hnypxzdrp76jdyc2tjd3yexwmhz3es4uwvz';
const query_msg = {"simulation": {"offer_asset": {"amount": "1", "info": {"token": {"contract_addr": contract}}}}};
while (true) {
terra.wasm.contractQuery(pair_address, query_msg).then(result => {
console.log(result);
})
}
javascript运行时是一个线程,
它有一个事件循环,它将按以下顺序执行多个队列:
- 调用堆栈
- 宏任务
- 微任务
当您处于无限循环时,代码执行永远不会*终止调用堆栈执行并进入下一步.
承诺侦听器(然后)的执行在微任务队列中。所以它永远不会到达那里。
所有这一切都是因为 javascript 运行时是单线程。
You should not use the while(true)
, loop, even on other languages,
it will running infinity an busy one of your cpu cores
我建议使用 setInterval()
而不是 while(true)
,如果你想轮询数据源 以进行更改。
setInterval( () => {
terra.wasm.contractQuery(pair_address, query_msg).then(result => {
console.log(result);
});
}, 5000);
我是 javascript 的新手,正在尝试查询一些区块链数据。我只查询一次就可以成功查询数据。 但我想连续。
当我使用 while 循环 尝试连续 运行 查询时,它没有检索到任何数据。
我试过使用范围为 100 的 for 循环,发现它似乎要等到找到所有 100 个数据点才返回。
我假设它正在做与我的 while 循环类似的事情,因此不会返回任何东西,因为它是无限的。我在 python 中完成了此操作,但在 javascript 中似乎有问题。
我的代码如下。
const { LCDClient } = require('@terra-money/terra.js');
const terra = new LCDClient({
//URL: 'https://bombay-lcd.terra.dev',
//chainID: 'bombay-12',
URL: 'https://lcd.terra.dev',
chainID: 'columbus-5'
});
const contract = 'terra1a8k3jyv3wf6k3zngza5h6srrxcckdf7zv90p6u';
const pair_address = 'terra19l0hnypxzdrp76jdyc2tjd3yexwmhz3es4uwvz';
const query_msg = {"simulation": {"offer_asset": {"amount": "1", "info": {"token": {"contract_addr": contract}}}}};
while (true) {
terra.wasm.contractQuery(pair_address, query_msg).then(result => {
console.log(result);
})
}
javascript运行时是一个线程, 它有一个事件循环,它将按以下顺序执行多个队列:
- 调用堆栈
- 宏任务
- 微任务
当您处于无限循环时,代码执行永远不会*终止调用堆栈执行并进入下一步.
承诺侦听器(然后)的执行在微任务队列中。所以它永远不会到达那里。
所有这一切都是因为 javascript 运行时是单线程。
You should not use the
while(true)
, loop, even on other languages, it will running infinity an busy one of your cpu cores
我建议使用 setInterval()
而不是 while(true)
,如果你想轮询数据源 以进行更改。
setInterval( () => {
terra.wasm.contractQuery(pair_address, query_msg).then(result => {
console.log(result);
});
}, 5000);