gpt4 book ai didi

javascript - 回调需要两个参数

转载 作者:行者123 更新时间:2023-12-01 02:34:54 25 4
gpt4 key购买 nike

我正在使用 node.js 设计一个简单的 Web 应用程序,我们只是使用从 index.jsrectangle.js 模块的回调。但是,我收到此回调错误,并且不明白哪种语法会导致此错误:-

index.js

// importing rectangle node module
var rect = require('./rectangle')

function solveReact(l, b){
console.log("l = "+l, "b = ", +b);

// We are using node module to call our callback,
// Note callback, always returns an erorr and function, and takes an error
// and funciton as parameters
rect(l, b, (err, rectangle)=> {
if(err){
console.log("Error:",err.message);
}
else{
console.log("perimeter:"+ rectangle.perimeter(), "area:"+
rectangle.area());
}
});

// This is after call to react, but this will execute before our rect()
//function finishes, because of async calls
console.log("After rect call")
};

// Some examples
solveReact(5, 6)
solveReact(-2, 3)

矩形.js

// Using node style export
module.exports = (x, y, callback) => {
if(x <= 0 || y <= 0){
// simulating a database call error, using delay
setTimeout(
callback(new Error("length and width needs to be greater than zero"),
null),
2000);
}

else{
// simulating a successful database call, using delay
setTimeout(
callback(null, {
perimeter: () => (2 * (x + y)),
area : () => (x*y)
}),
2000);
}
}

错误

l = 5 b =  6
perimeter:22 area:30
timers.js:427
throw new TypeError('"callback" argument must be a function');
^

TypeError: "callback" argument must be a function
at setTimeout (timers.js:427:11)
at module.exports (C:\Users\ADMIN\Documents\coursera_server_side_programming
_with_node\simple_node_app\rectangle.js:26:9)
at solveReact (C:\Users\ADMIN\Documents\coursera_server_side_programming_wit
h_node\simple_node_app\index.js:39:5)
at Object.<anonymous> (C:\Users\ADMIN\Documents\coursera_server_side_program
ming_with_node\simple_node_app\index.js:54:1)
at Module._compile (module.js:635:30)
at Object.Module._extensions..js (module.js:646:10)
at Module.load (module.js:554:32)
at tryModuleLoad (module.js:497:12)
at Function.Module._load (module.js:489:3)
at Function.Module.runMain (module.js:676:10)
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! simple_node_app@1.0.0 start: `node index`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the simple_node_app@1.0.0 start script.
npm ERR! This is probably not a problem with npm. There is likely additional log
ging output above.

最佳答案

您只需调用回调并将该函数调用的结果(不是函数)设置为在setTimeout之后执行。那么为什么你会收到回调参数不是函数的错误。 setTimeout 中的第一个参数的名称名为 callback,这会让您与函数名称混淆 - 错误与此参数有关。您需要在另一个函数中调用您的函数。该函数将在给定时间后调用,届时将调用您的回调

setTimeout(() => callback(new Error("length and width needs to be greater than zero"), null),
2000);

对代码中的其他 setTimeout-s 执行相同的方法。

关于javascript - 回调需要两个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48001860/

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