簡體   English   中英

Node.js 使用 Ora 微調器 package

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM