回调函数如何与设置的超时函数一起使用?

问题描述 投票:0回答:2
module.exports = (x, y , calllback) => {
    if (x <= 0 || y <= 0) {
        setTimeout(() => callback(new Error("Rectangle dimension should be greater than zero"), null), 
            2000);
    }
    else {
        setTimeout(() =>
            calllback(null, {
                perimeter: () => 2 * (x + y), 
                area: () => x * y
            }), 
            2000);
    }
}

我的问题是:为什么在回调函数作为setTimeout之前必须做()=>,所以我不能直接做setTimeout(callback(...),2000)。也许我在某种程度上缺乏对回调函数的理解,所以如果有人可以帮助我,那将是非常棒的!

我感谢每一个评论。

javascript node.js callback settimeout
2个回答
2
投票

您需要将一个函数传递给setTimeout,因此在某些情况下,您可以这样做:

setTimeout(callback, 2000);

但是,这样做时,您将放弃对将哪些值传递到回调中的任何控制。因此,这仅在回调不需要任何数据时才起作用。如果是这样,您将需要另一种方法。

执行以下操作是not选项:

setTimeout(callback(null, {
  perimeter: () => 2 * (x + y), 
  area: () => x * y
}, 2000);

这不是选项的原因是该代码未将函数传递给setTimeout。而是,它调用回调[,然后将其返回值传递给setTimeout。

因此,您要做的是创建一个新函数,并且该新函数将知道调用回调并传递适当的值,如示例中的代码。


实际上还有另一个选项,尽管这是特定于setTimeout的,对于使用回调的其他许多功能将不可用。 setTimeout允许您将其他参数传递给setTimeout,然后这些参数将被传递给您的回调:

setTimeout( callback, 2000, null, { perimeter: () => 2 * (x + y), area: () => x * y } )


0
投票
您应该能够向setTimeout函数发送回调。

setTimeout(callback, 2000) /*----------------------*/ // You can't invoke the function like this setTimeout(callback(), 2000)

您应该在超时后发送要调用的函数。    
© www.soinside.com 2019 - 2024. All rights reserved.