簡體   English   中英

Node.js - promisify readline

[英]Node.js - promisify readline

正如標題所述,我想知道是否可以在 node.js 中使用promisify ( https://nodejs.org/dist/latest-v8.x/docs/api/util.html#util_util_promisify_original ) 作為readline 我只能這樣做:

let data = [];
const parse = () => {
    return new Promise((resolve, reject) => {

        const rl = readline.createInterface({
            input: fs.createReadStream(path)
        });

        rl.on('line', (line) => {
            data.push(line);
        });

        rl.on('close', () => {
            resolve(data);
        });
    });
};

這是我如何承諾readline.question的示例:

const rl = require('readline');
const { promisify } = require('util');
const readline = rl.createInterface({
  input: process.stdin,
  output: process.stdout,
});

// Prepare readline.question for promisification
readline.question[promisify.custom] = (question) => {
  return new Promise((resolve) => {
    readline.question(question, resolve);
  });
};

// Usage example:
(async () => {
  const answer = await promisify(readline.question)('What is your name? ');
  readline.close();
  console.log('Hi %s!', answer);
})();

自定義 promisified 函數的 Node (v8) 文檔: https ://nodejs.org/dist/latest-v8.x/docs/api/util.html#util_custom_promisified_functions

在這里你有另一種方法來做到這一點。 它不使用promisify,我認為更簡單:

const readline = require('readline').createInterface({
    input: process.stdin,
    output: process.stdout
});

function question(query) {
    return new Promise(resolve => {
        readline.question(query, resolve);
    })
}

async function main() {
    const name = await question('Whats your name? ');
    console.log(`hello ${name}!`);
    readline.close();
}

main();

嘗試使用創建http://bluebirdjs.com/docs/api/promise.promisifyall.html 的bluebird

但如果代碼有效。 那么我認為您不需要承諾,因為您已經將其作為承諾返回。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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