Javascript NodeJS:Don';不要等待函数返回

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

我现在从NodeJS开始,我想用不同的参数一次运行同一个函数多次,但我不确定如何运行。 根据我目前的经验,NodeJS/Javascript通常不会等待函数返回,但在我的例子中,它确实让我感到困惑。我当前的代码如下所示:

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(值[开始]);
启动++;
}否则{
如果(开始)