我怎样才能同步使用readline?

我只是试图等待用户input密码,然后使用它,然后继续我的代码的其余部分。 错误是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构build一个链,那么你可以用不同的方式组合你的代码:

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

你可能不应该忘记.catch() ,否则解决scheme的工作,select应该基于哪个代码将更容易阅读。

您可能需要查看一些额外的承诺使用模式

如果你害怕使用callback和callback地狱的可能性。 你可以检查readline-sync包