我怎样才能同步使用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包