gpt4 book ai didi

javascript - CoffeeScript和异步递归函数

转载 作者:行者123 更新时间:2023-11-28 09:46:42 27 4
gpt4 key购买 nike

我尝试获取一个异步递归函数。在 JS 中,这应该如下所示:

(function asyncRecursion(){
doStuff();

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

这是我在 CoffeeScript 中尝试过的:

(asyncRecursion = ->
doStuff()

setTimeout asyncRecursion, 1000
)()

但这被编译为:

(asyncRecursion = function(){
doStuff();

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

我在 JSHint 中遇到了一个名为“错误调用”的错误。对于第 1 行,asyncRecursion 函数。那么我怎样才能获得 JSHint 安全的异步递归函数。编译版本可以工作,但仍然存在 JSHint 错误。或者我应该忽略那个“错误的调用”。错误?

最佳答案

我认为 JSHint 很困惑。赋值是一个表达式,该表达式的值是赋值的右侧;这意味着 f = function() { ... } 是一个值为函数的表达式,因此 (f = function() {...})()是完全有效的 JavaScript。

如果你向 JSHint 询问此事:

var f;
(f = 11)();

你会得到同样的“错误调用”错误,我们看到 JSHint 可能没有推断出 f 的类型,它只是不想让你 (f = x)() 对于任何 x (即使 x 绝对是一个函数)。我会告诉 JSHint 去寻找更好的工具。但是,如果您必须使用 JSHint,则可以将 CoffeeScript 分成两部分编写:

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

并获取此 JavaScript:

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

JSHint 对此感到满意。您的原始版本和“make JSHint happy”版本在执行时都会产生相同的结果。

如果想体验 JSHint 缺乏类型推断的额外乐趣,请询问它对此有何看法:

var asyncRecursion;
asyncRecursion = 11;
asyncRecursion();

关于javascript - CoffeeScript和异步递归函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11706267/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com