如何同步使用readline?

Dus*_*ndi 8 javascript readline node.js promise

我只是想等待用户输入密码,然后在继续使用其余代码之前使用它.错误是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);
    });
}
Run Code Online (Sandbox Code Playgroud)

Ale*_*kka 4

Readline 的question()函数不返回 Promise 或箭头函数的结果。所以,你不能用then()它。你可以简单地做

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

如果您确实需要使用 Promise 构建一条链,您可以以不同的方式编写代码:

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

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

您可能想查看一些其他的Promise 使用模式