无法使用javascript中的承诺迭代问题数组中的每个项目
我需要将问题存储在一个数组中,并使用spread运算符创建一个承诺数组,然后使用Promise.all等待它们并在不同的数组中收集答案。但我的代码只取第一个值,不考虑下一个问题无法使用javascript中的承诺迭代问题数组中的每个项目,javascript,node.js,arrays,asynchronous,promise,Javascript,Node.js,Arrays,Asynchronous,Promise,我需要将问题存储在一个数组中,并使用spread运算符创建一个承诺数组,然后使用Promise.all等待它们并在不同的数组中收集答案。但我的代码只取第一个值,不考虑下一个问题 const rl = readline.createInterface(process.stdin, process.stdout); function PromiseAllReadline(){ const questions=['What is you NAme?','What is your Age?','
const rl = readline.createInterface(process.stdin, process.stdout);
function PromiseAllReadline(){
const questions=['What is you NAme?','What is your Age?','What is your Occupation?'];
const answers=[];
const promiseQuestions=questions.map((question)=>{
return new Promise((resolve,reject)=>{
rl.question(question,(input)=>resolve(input));
});
});
Promise.all(promiseQuestions)
.then((values)=>{
console.log('values',values);
})
.catch((error)=>{
console.log('error is',error);
});
}
PromiseAllReadline();
问题是,在下面的代码中,所有问题都要立即调用
rl.question
,而您应该等待启动第二个问题,直到得到第一个问题的答案,…等等
const promiseQuestions=questions.map((question)=>{
return new Promise((resolve,reject)=>{
rl.question(question,(input)=>resolve(input));
});
});
使函数async
,并在for
循环中使用wait
,在收到上一个问题的答案后执行一个问题。这会产生一个承诺,因此承诺。所有的在这里都没有用处<代码>承诺。如果您可以并行执行问题(您尝试过),那么所有的
都会很有用,但是rl.question
不是这样工作的
以下是建议的解决方案。为了让它在浏览器代码段中运行,我模拟了rl
(忽略该代码):
//rl的模拟:
const rl={question(question,callback){document.querySelector(“div”).textContent=question;let input=document.querySelector(“input”);let button=document.querySelector(“button”);input.value=“”;button.addEventListener(“click”,函数处理程序(){button.removeEventListener(“click”,处理程序);callback(input.value);}};
异步函数promiseAllReadline(){
const questions=[“你叫什么名字?”,“你的年龄是多少?”,“你的职业是什么?”;
常量answers=[];
对于(让问题的数量为q){
推送(等待新的承诺(解决=>rl.question(q,解决));
}
返回答案;
}
promiseAllReadline()。然后((值)=>{
console.log('values',values);
}).catch((错误)=>{
log('error is',error);
});代码>
提交
什么是rl.问题
做什么?在给出任何答案之前,可以多次调用它吗?@trincot OK,但我看不出如何承诺。所有的都可能有用,因为(在正确的实现中)你永远不会有多个待定承诺。在这种情况下,我想创建一个等待答案的承诺数组。不确定你在讲什么。我从来没有写过这样的承诺。所有这些都是主要问题。