Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法使用javascript中的承诺迭代问题数组中的每个项目_Javascript_Node.js_Arrays_Asynchronous_Promise - Fatal编程技术网

无法使用javascript中的承诺迭代问题数组中的每个项目

无法使用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?','

我需要将问题存储在一个数组中,并使用spread运算符创建一个承诺数组,然后使用Promise.all等待它们并在不同的数组中收集答案。但我的代码只取第一个值,不考虑下一个问题

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,但我看不出
如何承诺。所有的
都可能有用,因为(在正确的实现中)你永远不会有多个待定承诺。在这种情况下,我想创建一个等待答案的承诺数组。不确定你在讲什么。我从来没有写过这样的承诺。所有这些都是主要问题。