Javascript readline.question不';t在循环内运行X次
Node.js中的Javascript readline.question不';t在循环内运行X次,javascript,node.js,readline,Javascript,Node.js,Readline,Node.js中的readline模块有一些问题。我需要询问客户id的次数与之前的问题回答的次数相同,但它只要求一次 这是我当前的代码: const readline = require('readline'); var prompts = { numEmails: null, customerIds: [], email: null, password: null } const rl = readline.createInterface({ inpu
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)
})
}
});
const readline=require('readline');
变量提示={
numEmails:null,
CustomerID:[],
电子邮件:空,
密码:null
}
const rl=readline.createInterface({
输入:process.stdin,
输出:process.stdout
});
//提出新问题
rl.问题('Num电子邮件:',(numEmails)=>{
for(设i=0;i{
prompts.customerId.push(customerId)
})
}
});
当我运行脚本时,在回答我希望循环运行4次之后,它应该询问Id Customer4次,但它只执行一次:
我做错了什么?这是因为
问题方法是异步工作的,所以在开始新的问题之前,您需要等待每个答案。您可以通过以下方式处理该问题
//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()
})
})
}
});
//提出新问题
rl.question('Num Emails:',异步(numEmails)=>{
for(设i=0;i{
rl.问题('ID客户'+i+1+':',(客户ID)=>{
prompts.customerId.push(customerId)
解决()
})
})
}
});
我正在使用async/await
语法来处理承诺,您可以在Internet上阅读更多关于它的信息。我的想法是将问题
呼叫包装成一个承诺
,然后当我收到回答时,我会解决承诺,这样我们就可以问下一个问题了。谢谢,这很有效!我已经尝试过使用async/await
,但是没有办法实现它。所以,我显然需要了解更多。