如何在 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);