javascript - 如何同步使用readline?

标签 javascript node.js promise readline

我只是想等待用户输入密码,然后在继续我的其余代码之前使用它。错误是 Cannot read property 'then' of undefined

let rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});

rl.question('Password: ', password => {
    rl.close();
    return decrypt(password);
}).then(data =>{
    console.log(data);
});

function decrypt( password ) {
    return new Promise((resolve) => {
        //do stuff
        resolve(data);
    });
}

最佳答案

Readline 的 question() 函数不返回 Promise 或箭头函数的结果。因此,您不能将 then() 与它一起使用。你可以简单地做

rl.question('Password: ', (password) => {
    rl.close();
    decrypt(password).then(data => {
       console.log(data);
    });
});

如果你真的需要用 Promise 构建一个链,你可以用不同的方式编写你的代码:

new Promise((resolve) => {
    rl.question('Password: ', (password) => {
        rl.close();
        resolve(password);
    });
}).then((password) => {
   return decrypt(password); //returns Promise
}).then((data) => {
   console.log(data); 
});

您可能不应该忘记 .catch(),否则任何一种解决方案都有效,选择应基于哪个代码更易于阅读。

您可能想查看一些额外的 promise usage patterns

关于javascript - 如何同步使用readline?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42080551/

相关文章:

node.js - 开始使用 webpack 4 的问题

node.js - 不知道如何使用 csv-writer 在 API 调用后逐行写入 csv 文件

node.js - 异步并行和 promise 不起作用

javascript - Expect(object).toEqual(object) 抛出错误对象读取没有方法调用

javascript - 基于数字值的条件 CSS 类

javascript - Joi 多个条件时

node.js - nodejs在远程linux服务器上执行命令

javascript - JavaScript(异步)如何在继续之前确定 "wait"的用途?

javascript - 为什么jquery追加在phonegap ios中不起作用

javascript - 如何在函数外使用变量?