readline.question 不会在循环内 运行 X 次

readline.question doesn't run X times inside the loop

我在使用 Node.js 中的 readline 模块时遇到了一些问题。我需要像之前的问题回复一样多次询问客户 ID,但它只询问一次。

这是我当前的代码:

const readline = require('readline');
var prompts = {
    numEmails: null,
    customerIds: [],
    email: null,
    password: null
}

const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
  });

//Ask for new question
rl.question('Num Emails: ', (numEmails) => {
    for(let i = 0; i<numEmails; i++) {
        //Ask for new question
        rl.question('Id Customer' + i+1 + ': ', (customerId) => {
            prompts.customerIds.push(customerId)
        })
    }
});

当我 运行 脚本时,在回答我想要循环到 运行 4 次后,它应该询问 Id Customer 4 次,但只执行一次:

我做错了什么?

发生这种情况是因为 question 方法是异步工作的,因此您需要等待每个答案,然后再开始新的 question。您可以按以下方式处理。

//Ask for new question
rl.question('Num Emails: ', async (numEmails) => {
    for (let i = 0; i<numEmails; i++) {
        // Wait for a question to be answered. 
        await new Promise((resolve) => {
          rl.question('ID Customer ' + i+1 + ': ', (customerId) => {
            prompts.customerIds.push(customerId)
            
            resolve()
          }) 
        })
    }
});

我正在使用 async/await 语法来处理 promises,您可以在 Internet 上阅读更多相关信息。我的想法是,我将 question 调用包装到 Promise 中,然后当我收到答案时,我解决了承诺,因此我们将提出下一个问题。