Javascript setImmediate内部setImmediate替换

Javascript setImmediate内部setImmediate替换,javascript,node.js,Javascript,Node.js,我有一个这样的结构,它是一个“操作”定义数组: { http1: { operation:"http", params:{...parameters spesific to operation...}, name:"http1", success: "sendmail2", error: "writefile3" }, sendmail2: { operation:&qu

我有一个这样的结构,它是一个“操作”定义数组:

{ 
 http1: {
   operation:"http", 
   params:{...parameters spesific to operation...},
   name:"http1",
   success: "sendmail2",
   error: "writefile3"
 },
 sendmail2: {
   operation:"sendmail",
   params:{...parameters spesific to operation...},
   name:"sendmail2",
   success: "http4",
   error: "writefile3",
 },
 ... and so on
}
几乎所有操作实际上都是在内部执行异步操作的函数(如http调用、发送邮件、读取文件等),并将上面的操作对象和回调(下一步)作为参数,类似于以下内容:

function operation_function(operation_object, next){
  doSomeAsyncStuff(operation_object.params.x,operation_object.params.y, function(err,result){
    if(err){
       next(operation_object.error);
    }
    else{
       next(operation_object.success);
    }
  });
}
操作也会将错误或结果传递给下一个,或者有成功或错误以外的可能性,但我针对这个问题简化了它们

现在有一个函数运行这些操作(此处简化),操作函数是一个
require
d操作文件

function runOperations(operation_list,operation_name,result_callback){
   let operation = operation_list[operation_name];
   //this is the operation function above
   operationFunctions[operation.operation](operation, function (next_operation){
      //this is the next function
      if(!nextOperation){
        result_callback();
      }
      else setImmediate(runOperations,operation_list,next_operation,result_callback);
   });
}
有一个名为start的特殊操作,它只指向另一个操作,我在http服务器请求处理程序中调用runOperations,从请求参数中获取操作列表名称,从数据库中获取列表,并使用start操作调用runOperations,回调是对http请求的响应

我的问题是,我不能递归调用runOperations,也不能直接调用下一个_操作的函数来代替setImmediate,因为操作_列表可能足够长,导致“达到最大调用堆栈大小”

setImmediate解决了这个问题,但我认为除了setImmediate之外,还有更好的方法。process.nextTick通常是不可用的,因为有两个同步函数,并且存在多次同步调用process.nextTick并耗尽事件循环的非零可能性

我的主要问题是,这个东西存在于http服务器请求处理程序中,并且可能同时运行多个不同的操作,setImmediate在运行多个操作(同时处理多个请求)时似乎会对性能产生影响

任何指导都将不胜感激