我是 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);
})
}
uj5u.com熱心網友回復:
javascript 運行時是一個執行緒,它有一個事件回圈,它將按以下順序執行多個佇列:
- 呼叫堆疊
- 宏任務
- 微任務
當您處于無限 while 回圈中時,代碼執行永遠不會*終止呼叫堆疊執行并進入下一步。
承諾偵聽器(thens)的執行在微任務佇列中。所以它永遠不會到達那里。
這一切都是因為 javascript 運行時是單執行緒的。
您不應該使用
while(true), 回圈,即使在其他語言上,它也會無限運行您的 CPU 核心之一
如果要輪詢資料源的更改,我建議使用 ThesetInterval()而不是。while(true)
setInterval( () => {
terra.wasm.contractQuery(pair_address, query_msg).then(result => {
console.log(result);
});
}, 5000);
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/360668.html
標籤:javascript 异步 无限循环
上一篇:如何從異步函式中異步運行代碼?
