我正在尝试运行这段代码,但它似乎没有执行回调。我在试着理解到底发生了什么。
function exampleSimpleTask(done) {
console.log("task", "Before "+new Date().getTime());
setTimeout(() => done, 2000);
}
function demo() {
alert("Demo Executed");
}
exampleSimpleTask(demo); // it doesn't do anything.
// exampleSimpleTask.call(null, demo);
// exampleSimpleTask.call(null, demo.bind(this));
我不确定为什么要执行回调,我怀疑它与箭头函数有关。如果function()
取代了=>
,会发生什么
发布于 2018-10-23 05:37:05
在您的函数exampleSimpleTask
中,您永远不会调用函数done
function exampleSimpleTask(done) {
console.log("task", "Before "+new Date().getTime());
setTimeout(() => done(), 2000);
}
function exampleSimpleTask(done) {
console.log("task", "Before "+new Date().getTime());
setTimeout(() => done(), 2000);
}
function demo() {
alert("Demo Executed");
}
exampleSimpleTask(demo);
发布于 2018-10-23 05:35:52
您忘记了在lambda表达式中调用done()
函数。下面的代码应该可以工作:
function exampleSimpleTask(done) {
console.log("task", "Before "+new Date().getTime());
setTimeout(() => done(), 2000);
}
function demo() {
alert("Demo Executed");
}
exampleSimpleTask(demo); // it doesn't do anything.
// exampleSimpleTask.call(null, demo);
// exampleSimpleTask.call(null, demo.bind(this));
发布于 2018-10-23 05:57:44
在setTimeout
中不需要箭头函数。setTimeout()
的第一个参数是在到达时间时要执行的函数,而done
包含对该函数的引用,因此只需直接传递它即可。
function exampleSimpleTask(done) {
console.log("task", "Before "+new Date().getTime());
setTimeout(done, 2000);
}
function demo() {
alert("Demo Executed");
}
exampleSimpleTask(demo); // it doesn't do anything.
// exampleSimpleTask.call(null, demo);
// exampleSimpleTask.call(null, demo.bind(this));
https://stackoverflow.com/questions/52938045
复制相似问题