Как я могу использовать 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);
});
}
2 ответов
Readline в question()
функция не возвращает обещание или результат функции стрелка. Таким образом, вы не можете использовать then()
С ним. Вы могли бы просто сделать
rl.question('Password: ', (password) => {
rl.close();
decrypt(password).then(data => {
console.log(data);
});
});
Если вам действительно нужно, чтобы построить цепочку с обещанием, вы можете составить свой код по-другому:
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-пакет синхронизации