Ошибка при использовании setTimeout для извлечения результата в Javascript

Pak Hang Leung спросил: 28 апреля 2018 в 08:28 в: javascript

Для моего скрипта есть ошибка для использования функции setTimeout.

Например, мой сценарий похож на

function student() {
    var obj = {
      name: "Mary", 
    number: +44 26281001
    }
 return obj  
}

И я хотел бы отложить выполнение функции в течение 4 секунд позже, а затем сохранение переменной xI написало следующую функцию:

var x = setTimeout(student(), 4000);

И она возвращает число 1280, а спустя 4 секунды возвращает ошибки:

Uncaught SyntaxError: Неожиданный идентификатор

Какая ошибка и как ее исправить? Большое спасибо за вашу помощь.


1 ответ

Есть решение
Mert Akcakaya ответил: 28 апреля 2018 в 10:36

Ваш номер должен быть заключен как

number: '+44 26281001'
// or
number: "+44 26281001"

, чтобы number стал строкой. И передайте функцию как параметр, а не вызывайте ее, и передайте результат student() в качестве параметра.

var x = setTimeout(student, 4000);

Btw, если вы хотите назначить / log объект-ученик, тогда вам нужно вызвать его следующим образом:

setTimeout(()=>console.log(student()), 4000);

EDIT

function student() {
  return {
    name: 'Mary',
    number: '+44 26281001'
  }
}

var studentVar;

var x = setTimeout(function() {
  studentVar = student();
}, 4000);
console.log(x);
console.log(studentVar); // Logs 'undefined'

(function logXAfter5Seconds() {
  setTimeout(() => {
    console.log(x);
    console.log(studentVar); // Logs the student object after 5 seconds
  }, 5000);
})();
Pak Hang Leung ответил: 28 апреля 2018 в 08:41
Спасибо! Я запускаю код, как вы сказали еще раз, однако, когда я пытался использовать console.log (x) через 4 секунды, я подумал, что он показывает мне еще номер 2586 и снова неопределенный .. почему?
Mert Akcakaya ответил: 28 апреля 2018 в 09:33
См. Редактирование, он отображает идентификатор таймера, возвращаемый вызовом setTimeout (), сразу и после.
Pak Hang Leung ответил: 28 апреля 2018 в 10:06
И еще один вопрос, если я хочу назначить / зарегистрировать объект-ученик, есть ли альтернативный способ помимо ES6?
Mert Akcakaya ответил: 28 апреля 2018 в 10:37
Обновлен ответ, чтобы продемонстрировать, как назначить результат функции student ().
Mert Akcakaya ответил: 28 апреля 2018 в 03:16
Из MDN: "Возвращаемое значение timeoutID является положительным целочисленным значением, которое идентифицирует таймер, созданный вызовом setTimeout (), и это значение может быть передано clearTimeout () для отмены таймаута".