Luk*_*ach 2 callback readline node.js promise
我正在尝试使用node.js包readline在命令行上获取用户输入,并且我想通过promise来输入输入。但是,输入永远不会通过then链。我认为问题可能出在回调方法中实现了诺言这一事实,但我不知道该如何解决。
此问题的一个示例如下所示:
import rlp = require('readline');
const rl = rlp.createInterface({
input: process.stdin,
output: process.stdout
});
let prom = new Promise((fulfill, reject) => {
rl.question('Enter input: ', input => rl.close() && fulfill(input));
});
prom.then(result => {console.log(result); return prom})
.then(result => {console.log(result); return prom})
.then(result => console.log(result));Run Code Online (Sandbox Code Playgroud)
如果在node.js中运行,则问题将出现一次,输入输入后程序将停止。我希望它一直等到输入第一个输入后,才应该打印该输入并要求下一个输入。
提前致谢!
readlineNode.js 17 为module提供了新的基于 Promise 的 API:import { createInterface } from 'node:readline/promises'
import { stdin, stdout } from 'process'
const rl = createInterface({ input: stdin, output: stdout })
const answer = await rl.question('What do you think of Node.js? ')
console.log('Thank you for your valuable feedback:', answer)
rl.close()
Run Code Online (Sandbox Code Playgroud)
https://nodejs.org/api/readline.html#readline
一旦您的诺言得以兑现,您就不必再等待了。我也将rl.close()通话移至末尾,因为只需要调用一次即可。
const rlp = require('readline');
const rl = rlp.createInterface({
input: process.stdin,
output: process.stdout
});
function ask() {
return new Promise((resolve, reject) => {
rl.question('Enter input: ', (input) => resolve(input) );
});
}
ask()
.then((result) => { console.log(result); return ask(); })
.then((result) => { console.log(result); return ask(); })
.then(result => { console.log(result); rl.close() });
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2592 次 |
| 最近记录: |