#javascript #asynchronous
Вопрос:
У меня есть упражнение, в котором я должен привести три аргумента: функцию и два числа. Функция, которую я даю, должна быть активирована (каждая) через x
миллисекунды в течение y
миллисекунд. Я хотел сделать helper
вот так:
function helper(string) {
console.log("Printing string which was given: " string)
}
но когда я делаю это так и пытаюсь включить свою функцию ex1_4(helper("some string"), 500,5000)
, я получаю ошибку, которая Callback must be a function
Что я делаю не так?
function ex1_4(func, x,y) {
const resFunction = setInterval((func), x)
const stop = setTimeout(() => {clearInterval(resFunction)}, y)
}
function helper(string) {
console.log("Printing string which was given: " string)
}
ex1_4(helper("some string"),500,5000)
Ответ №1:
helper("some string")
Это вызов функции, которая возвращает значение, в вашем случае оно не определено. Если вы хотите превратить его в обратный вызов, вам нужно обернуть его в функцию примерно так:
() => helper(“some string”)
В вашем коде:
ex1_4(() => helper("some string"),500,5000)
Ответ №2:
Когда вы добавляете helper("some string")
, вы фактически выполняете метод, вместо того, чтобы отправлять метод ex1_4
. Вы должны напечатать что-то вроде …
ex1_4(helper,500,5000) // no parenthesis
… точно так же, как ты сделал с setInterval((func), x)
.
Однако вы хотите добавить параметры helper
, и в этом случае вы можете использовать привязку. Вам действительно следует узнать о bind()
, call()
, и apply()
.
ex1_4(helper.bind(null, "some string"),500,5000)
function ex1_4(func, x,y) {
const resFunction = setInterval((func), x)
const stop = setTimeout(() => {clearInterval(resFunction)}, y)
}
function helper(string) {
console.log("Printing string which was given: " string)
}
ex1_4(helper.bind(null, "some string"),500,5000)