Javascript Node.js:调用递归函数的后处理结果

Javascript Node.js:调用递归函数的后处理结果,javascript,node.js,recursion,Javascript,Node.js,Recursion,我需要处理延迟调用外部服务器的数组对象,将所有结果收集到数组中并进行后处理。示例如下: (异步()=>{ const serverOperation=()=>newpromise(resolve=>setTimeout(()=>resolve(),2000)); const myOtherFunction=results=>console.log('results',results); const objectsArray=[{},{},{}]; 常量结果=[]; 常量myFunc=async

我需要处理延迟调用外部服务器的数组对象,将所有结果收集到数组中并进行后处理。示例如下:

(异步()=>{
const serverOperation=()=>newpromise(resolve=>setTimeout(()=>resolve(),2000));
const myOtherFunction=results=>console.log('results',results);
const objectsArray=[{},{},{}];
常量结果=[];
常量myFunc=async arr=>{
常数el=arr.shift();
如果(!el){
//完成对递归函数的调用
返回;
}
//一些大型服务器操作
const result=等待服务器操作();
结果。推(结果);
//需要等一段时间吗
setTimeout(异步()=>{
console.log(Date.now());
等待myFunc(arr);
}, 3000);
};
等待myFunc(objectsArray);
等待myOtherFunction(results);//您可以使用超时承诺来延迟函数的执行,而不是
setTimeout

代码的问题在于,即使将
async
函数传递给
setTimeout
它也不会停止当前函数的执行。
setTimeout
只会将任务移动到微任务队列并执行传递给它的函数。但它不会导致父函数停止,因为传递给
setTimeout
的函数不会立即调用-它会在以后的不同时间、不同地点调用

(异步()=>{
const serverOperation=()=>newpromise(resolve=>setTimeout(()=>resolve('server op'),2000));
const myOtherFunction=results=>console.log('results',results);
const objectsArray=[{},{},{}];
常量结果=[];
//用于延迟操作
const timeoutPromise=()=>newpromise(resolve=>setTimeout(()=>resolve(),3000));
常量myFunc=async arr=>{
常数el=arr.shift();
如果(!el){
//完成对递归函数的调用
返回;
}
//一些大型服务器操作
const result=等待服务器操作();
结果。推(结果);
//需要等一段时间吗
等待时间输出提示();
console.log(Date.now());
等待myFunc(arr);
};
等待myFunc(objectsArray);

等待治疗功能(结果);//有没有理由不把对
myOtherFunction
的调用放在
myFunc
内的早期返回中?嗯……是的,这是一个不错的选择!我会试试。谢谢!是的,我知道,事件循环是如何工作的,谢谢。我只是想展示有问题的地方。当然,我已经添加了解释,以防有人不知道;)