繁体   English   中英

如何同步使用readline?

[英]How can I use readline synchronously?

我只是想等待用户输入密码,然后在继续使用其余代码之前使用它。 错误是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() ,否则任何一个解决方案都可以工作,选择应该基于哪个代码更容易阅读。

您可能希望查看其他一些承诺使用模式

如果你害怕使用回调和回调地狱的可能性。 您可以检查readline-sync软件包

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM