Node.js - promisify readline

ugl*_*ode 4 javascript node.js promise

正如标题所述,我想知道是否可以在 node.js 中使用promisifyhttps://nodejs.org/dist/latest-v8.x/docs/api/util.html#util_util_promisify_originalreadline?我只能这样做:

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);
        });
    });
};
Run Code Online (Sandbox Code Playgroud)

Jes*_*pez 16

Here you have a simple way to do it that doesn't use 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();
Run Code Online (Sandbox Code Playgroud)


Jos*_*ost 5

这是我如何承诺的一个例子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);
})();
Run Code Online (Sandbox Code Playgroud)

自定义 promisified 函数的节点 (v8) 文档:https ://nodejs.org/dist/latest-v8.x/docs/api/util.html#util_custom_promisified_functions


小智 0

尝试使用 bluebird 创建http://bluebirdjs.com/docs/api/promise.promisifyall.html

但如果代码有效。那么我认为你不需要承诺这一点,因为你已经将其作为承诺返回。