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)。也许我在某种程度上缺乏对回调函数的理解,所以如果有人可以帮助我,那将是非常棒的!
我感谢每一个评论。
您需要将一个函数传递给setTimeout,因此在某些情况下,您可以这样做:
setTimeout(callback, 2000);
但是,这样做时,您将放弃对将哪些值传递到回调中的任何控制。因此,这仅在回调不需要任何数据时才起作用。如果是这样,您将需要另一种方法。
执行以下操作是not选项:
setTimeout(callback(null, {
perimeter: () => 2 * (x + y),
area: () => x * y
}, 2000);
这不是选项的原因是该代码未将函数传递给setTimeout。而是,它调用回调[,然后将其返回值传递给setTimeout。
因此,您要做的是创建一个新函数,并且该新函数将知道调用回调并传递适当的值,如示例中的代码。setTimeout(
callback,
2000,
null,
{
perimeter: () => 2 * (x + y),
area: () => x * y
}
)
setTimeout
函数发送回调。setTimeout(callback, 2000)
/*----------------------*/
// You can't invoke the function like this
setTimeout(callback(), 2000)
您应该在超时后发送要调用的函数。