0

私は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”
}

はい、これは、トランスレーターが自動決定し、メソッドを並行して実行する必要があり、別のメソッドの終了後にメソッドを呼び出す必要がある場合に理想的なケースです。私はそれが動作していることを想像することができます

お願いします、あなたは似たようなことを知っていますか?

4

2 に答える 2

0

Promises (ここに実装があります)を調べましたか? これは単純な Javascript であるため、CoffeeScript のように構文を変更する必要はありませんが、「a、b、および c を使用したいが d は使用したくない」というケースをエレガントな方法で処理できるようになります。

もう 1 つの可能性はasync.auto、非同期関数を実行し、要件に応じて最適な順序を決定する を使用することです。

于 2013-11-08T09:51:03.173 に答える