Javascript NodeJS:Don';不要等待函数返回
我现在从NodeJS开始,我想用不同的参数一次运行同一个函数多次,但我不确定如何运行。 根据我目前的经验,NodeJS/Javascript通常不会等待函数返回,但在我的例子中,它确实让我感到困惑。我当前的代码如下所示:Javascript NodeJS:Don';不要等待函数返回,javascript,node.js,asynchronous,Javascript,Node.js,Asynchronous,我现在从NodeJS开始,我想用不同的参数一次运行同一个函数多次,但我不确定如何运行。 根据我目前的经验,NodeJS/Javascript通常不会等待函数返回,但在我的例子中,它确实让我感到困惑。我当前的代码如下所示: XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest; start=function(values){ max=5 started=0 finished=0 maxReachedBef
XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;
start=function(values){
max=5
started=0
finished=0
maxReachedBefore=false
finishedStarting=false
result=[]
interval = setInterval(function(){
if(!finishedStarting){
if((started-finished)>= max) {
if(!maxReachedBefore){
console.log("Max Reached!")
maxReachedBefore=true
}
return;
}
maxReachedBefore=false
getValue(values[started])
console.log("Started getValue")
started++
} else {
if (started<=finished){
clearInterval(interval)
console.log("Finished!")
}
}
},10)
}
getValue=function(value){
var request=new XMLHttpRequest()
request.open("get","MY_WEBSITE_HERE.COM/"+value, false)
request.send()
result=result.concat(request.responseText)
console.log("Finished getValue")
finished++
}
start(["a","medium","sized","list","of","values","that","i","want","to","get","the","corresponding","values","to"])
XMLHttpRequest=require(“XMLHttpRequest”).XMLHttpRequest;
开始=功能(值){
最大值=5
开始=0
完成=0
maxReachedBefore=false
finishedStarting=错误
结果=[]
间隔=设置间隔(函数(){
如果(!finishedStarting){
如果((开始-完成)>=最大值){
如果(!maxReachedBefore){
log(“达到最大值!”)
maxReachedBefore=true
}
返回;
}
maxReachedBefore=false
getValue(值[已启动])
log(“启动getValue”)
开始++
}否则{
如果(started)getValue的运行次数少于6次,但事实并非如此。getValue是一个接一个地启动的,下一个只在上一个完成后启动。
有人能解释为什么会发生这种情况/帮我改变它吗
[请发发慈悲,我对NodeJS比较陌生]您正在向服务器发送同步请求。因此该函数将等待服务器的响应
request.open("get","MY_WEBSITE_HERE.COM/"+value, false)
最后一个参数boolean
指定调用是同步还是异步
request.open("get","MY_WEBSITE_HERE.COM/"+value, true)
这将发送异步调用,并在回调函数中添加finished get value的控制台语句
var finished = 0;
var result=[];
start=function(values){
max=5
started=0
maxReachedBefore=false
finishedStarting=false
interval = setInterval(function(){
if(!finishedStarting){
if((started-finished)>= max) {
if(!maxReachedBefore){
console.log("Max Reached!")
maxReachedBefore=true;
finishedStarting = true;
}
return;
}
maxReachedBefore=false;
console.log("Started getValue " + values[started]);
getValue(values[started]);
started++;
} else {
if (started<=finished){
clearInterval(interval)
console.log("Finished!")
}
}
},10);
}
getValue=function(value){
var request=new XMLHttpRequest()
request.open("get","MY_WEBSITE_HERE.COM/"+value, true);
request.onreadystatechange = function () {
if(request.readyState === 4 && request.status === 200) {
result=result.concat(request.responseText);
console.log("Finished getValue " + value)
finished++;
}
};
request.send();
console.log("request sent");
}
var finished=0;
var结果=[];
开始=功能(值){
最大值=5
开始=0
maxReachedBefore=false
finishedStarting=错误
间隔=设置间隔(函数(){
如果(!finishedStarting){
如果((开始-完成)>=最大值){
如果(!maxReachedBefore){
log(“达到最大值!”)
maxReachedBefore=true;
finishedStarting=真;
}
返回;
}
maxReachedBefore=false;
log(“启动的getValue”+值[Started]);
getValue(值[开始]);
启动++;
}否则{
如果(开始)