質問

非同期再帰の関数を取得しようとします。JSではこれがこのようになるはずです:

(function asyncRecursion(){
  doStuff();

  setTimeout(asyncRecursion, 1000);
})();
.

これは私がCoffeeScriptで試したものです:

(asyncRecursion = ->
  doStuff()

  setTimeout asyncRecursion, 1000
)()
.

しかしこれは次のようにコンパイルされています:

(asyncRecursion = function(){
  doStuff();

  setTimeout(asyncRecursion, 1000);
})();
.

と私は「失効不正」と呼ばれるJShintにエラーが発生しました。1行目の場合は、A.SyncreCursion関数です。 それでは、JShint Safe Asynchronous再帰関数を得るにはどうすればよいですか。コンパイルされたバージョンは機能しますが、まだJShintエラーがあります。それとも私はその「失効の悪い」を無視してください。エラー?

役に立ちましたか?

解決

JShintが混乱していると思います。割り当ては式であり、その式の値は割り当ての右側です。つまり、f = function() { ... }はその値が関数である式であるため、(f = function() {...})()は完全に有効なJavaScriptです。

これについてJShintを尋ねた場合:

var f;
(f = 11)();
.

同じ「失効」エラーを得ることができ、JShintがfの種類を推測していないことがわかります。 。私はJShintにポンド砂に行き、より良いツールを見つけることを伝えたいと思います。ただし、JShintを使用する必要がある場合は、CoffeeScriptを2つの部分で書くことができます。

asyncRecursion = ->
  doStuff()
  setTimeout asyncRecursion, 1000
asyncRecursion()
.

とこのJavaScriptを入手:

var asyncRecursion;
asyncRecursion = function() {
  doStuff();
  return setTimeout(asyncRecursion, 1000);
};
asyncRecursion();
.

どのJShintが満足しています。オリジナルと「JShint Happy」バージョンの両方が実行されたときに同じ結果が得られます。

JShintの推論の不足の欠如を楽しんで、これについて考えているのか尋ねてください。

var asyncRecursion;
asyncRecursion = 11;
asyncRecursion();
.

他のヒント

あなたはこのようにそれを書くことができます:

asyncRecursion = do ->
  doStuff()

  setTimeout asyncRecursion, 1000
.

コンパイルされます:

var asyncRecursion;

asyncRecursion = (function() {
  doStuff();
  return setTimeout(asyncRecursion, 1000);
})();
.

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top