[英]Node.js using the Ora spinner package
我正在嘗試在 Node 中創建一個相當簡單的命令行應用程序,並且我想嘗試添加一個微調器。 我找到了 Ora package,但我無法讓它工作。 幾乎我能找到的每個示例都使用 setTimeout function 來確定微調器何時旋轉,但我希望在運行冗長的代碼塊時讓微調器旋轉。 我嘗試通過使用 Promisified function 來做到這一點,但我不確定這是否是正確的做法。 當我使用以下形式運行某些東西時,微調器會顯示在命令行中,但實際上並沒有旋轉。 任何幫助表示贊賞。
const ora = require('ora') const spinner = ora('Doing something...').start() function doSomething() { return new Promise( resolve => { // DO SOMETHING TIME-CONSUMING HERE resolve('Done') }) } async function main() { await doSomething() spinner.stop() } main()
在doSomething
function 中使用一些非阻塞代碼時,您的代碼可以正常工作,例如:
function doSomething() {
return new Promise( resolve => {
setTimeout(() => resolve('Done'), 1000);
})
}
但我從你的描述和你描述的症狀中懷疑你正在做一些阻塞,比如:
function doSomething() {
return new Promise( resolve => {
let i = 0;
while (i++ < 1e10) {}
resolve('Done');
})
}
這確實不會旋轉微調器,那是因為 JS 是單線程的並且使用協作多任務處理。 因此,任何阻塞的線程(想想“函數”)也會阻止其他任何事情的發生。 因此,JS 中的好公民總是返回控制權並在完成時使用回調或類似的回調。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.