一个可翻译成JavaScript的脚本,带有callback-hell自动避免器

A script translatable to JavaScript with callback-hell automatic avoider

本文关键字:callback-hell 带有 脚本 一个 可翻译 JavaScript      更新时间:2023-09-26

我正在寻找JavaScript的"翻译器",就像已经是CoffeScript一样,例如可以与forEach一起使用(灵感来自Groovy)

myArray.forEach() -> val, idx {
   // do something with value and idx
}

翻译成 JavaScript:

myArray.forEach(function(val, idx){
   // do something with value and idx
});

或者更有用的东西...

function event(cb){
  foo()-> err, data1;
  bar(data1)-> err, data2;      
  cb(data2);
}

该方法封装:

function event(cb){
  foo(function(err,data1){
    bar(data1, function(err, data2) {
       cb(data2);
    });
  });
}

我想问一下,像这样与 JavaScript 类似的"编译器"是否已经不存在了?

什么会超级酷...我在 NodeJS 中的代码主要看起来像这样:-)

function dealer(cb){
  async.parallel([
    function(pcb){
      async.watterfall([function(wcb){
              first(function(a){ wcb(a); });
          }, function(a, wcb){
              thirt(a, function(c){ wcb(c); });
              fourth(a, function(d){ 
                // dealing with “a” as well and nobody care my result
              });
          }], 
        function(err, array_with_ac){
          pcb(array_with_ac);
        });
      }, function(pcb){
            second(function(b){ pcb(b);});
      }], function(err, data){
         cb(data[0][0]+data[1]+data[0][1]); // dealing with “a” “b” and “c” not with “d”
    });
  }

但是,看看代码可以多么漂亮可读

function dealer(cb){
  first() -> a;
  second() -> b;
  third(a) -> c; // dealing with “a”     
  fourth(a) -> d; // dealing with “a” as well and nobody care about my result    
  cb(a+b+c); // dealing with “a” “b” and “c” not with “d”
}

是的,这是转换器自动决定的理想情况,方法需要并行运行,并且在完成另一个方法后需要调用方法。我可以想象这是作品

拜托,你知道类似的事情吗?

你研究过承诺吗(这是一个实现)?它是普通的Javascript,所以你不会像CoffeeScript那样改变语法,但承诺允许你以一种优雅的方式处理"我想使用a,b和c,但不是d"的情况。

另一种可能性是使用 async.auto ,它将执行异步函数并根据需求确定最佳顺序。

如果您专门寻找异步"问题"的解决方案,您可能需要查看 Streamline。