CoffeeScriptと非同期再帰関数
-
13-12-2019 - |
質問
非同期再帰の関数を取得しようとします。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);
})();
. 所属していません StackOverflow