首页 > 解决方案 > 在从命令提示符获取输入之前打印输出?

问题描述

大家好,我是 javascript 的新手。在这些代码中,首先打印 obj,然后输入命令提示符,我使用 async 并等待,请更正代码。

const readline = require('readline').createInterface({
input: process.stdin,
output: process.stdout
});
async function create() {
 let obj = {fname:"",lname:"",email_adds:"",phone_number:""}
 readline.question("Enter First name",function(name) {
    readline.question("Enter Last name",function(lname){
        readline.question("Enter Email address ",function(em){
            readline.question("Enter Phone number ",function(ph){
                obj.fname = name
                obj.lname = lname
                obj.email_adds = em
                obj.phone_number = ph
                
         readline.close();
            });
        });
    });
 });
 function print(){
     console.log(obj)
 }
 await print()
}
create()

标签: javascriptnode.js

解决方案


我们可以将其转换为Promise.

所以console.log会等到Promise解决。

Promise对象表示异步操作的最终完成(或失败)及其结果值。

如果异步操作成功,则调用resolve函数返回预期的结果。同样,如果在执行异步操作的过程中发生了一些意外错误,reject函数也会返回结果。

当其中一个resolvereject被调用时,promise 已经完成。

thenpromise 被解决时触发回调。也可以链接then方法回调。当catchpromise 被拒绝时执行回调。

const readline = require('readline').createInterface({
input: process.stdin,
output: process.stdout
});
function create() {
    return new Promise(function(resolve, reject) {
        let obj = {
            fname: "",
            lname: "",
            email_adds: "",
            phone_number: ""
        }
        readline.question("Enter First name", function(name) {
            readline.question("Enter Last name", function(lname) {
                readline.question("Enter Email address ", function(em) {
                    readline.question("Enter Phone number ", function(ph) {
                        obj.fname = name
                        obj.lname = lname
                        obj.email_adds = em
                        obj.phone_number = ph
                        readline.close();
                        resolve(obj);
                    });
                });
            });
        });
        
    })
}
create().then((res) => {
  console.log(res)
})


推荐阅读