我遇到以下代码的问题:
var placeingOrders = function(orderNumber) {
console.log("Order number: ", orderNumber);
requestedOrder(orderNumber, returnOrder);
};
function requestedOrder(orderNumber, callback) {
setTimeout(orderNumber, callback, 5000);
}
function returnOrder() {
console.log("Order number: " , " is delivered");
}
我试图在回调函数上传递参数但是当我这样做时,我得到以下错误代码:
timers.js:348
throw new TypeError('"callback" argument must be a function');
^
TypeError: "callback" argument must be a function
at exports.setTimeout (timers.js:348:11)
当然,如果我在没有参数的情况下运行相同的代码,它将起作用。
var placeingOrders = function(orderNumber) {
console.log("Order number: ", orderNumber);
requestedOrder(returnOrder);
};
function requestedOrder(callback) {
setTimeout(callback, 5000);
}
function returnOrder() {
console.log("Order number: " , orderNumber , " is delivered");
}
我想知道我在这里做错了什么。如果我想传递参数,我如何正确使用此回调函数。
(ps:我不是英语母语人士,sry for the)
答案 0 :(得分:4)
为什么会出现此错误?
setTimeout
期望将回调函数作为第一个参数,但是在第一个位置传递一个数字,那么为什么会出现异常。第二种情况有效,因为您从第一个位置删除了orderNumber
,该函数就可以获得它。
你需要在第二位之后传递回调函数的参数。请参阅https://justpaste.it/1cfen函数签名。首先是回调函数,第二个 - 时间,至少要调用函数,之后传递的所有内容都作为参数传递给回调函数。
这是函数的签名 - []
是可选的。
setTimeout(function[, delay, param1, param2, ...])
代码
var placeingOrders = function(orderNumber) {
console.log("Order number: ", orderNumber);
requestedOrder(orderNumber, returnOrder);
};
function requestedOrder(orderNumber, callback) {
setTimeout(callback, 5000, orderNumber);
}
function returnOrder(orderNumber) {
console.log("Order number: " + orderNumber + " is delivered");
}
placeingOrders(14);