Обратный вызов Javascript не вызывается - PullRequest
0 голосов
/ 23 октября 2018

Я пытаюсь запустить этот фрагмент, и он не выполняет обратный вызов.Я пытаюсь понять, что происходит.

  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()?

Ответы [ 4 ]

0 голосов
/ 23 октября 2018

Нет необходимости в функции стрелки в 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)); 
0 голосов
/ 23 октября 2018

Вы забыли добавить скобки для вызова метода demo :

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.

В качестве альтернативы вы можете просто поместить имя метода в функцию setTimeout () , например:

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.
0 голосов
/ 23 октября 2018

внутри вашей функции 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); 
0 голосов
/ 23 октября 2018

Вы забыли вызвать функцию 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)); 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...