2014-01-28 2 views
8

Я сделал пример образца на Meteor.setTimeout(), используя Meteor. В этом примере я получаю сообщение об ошибке. Я не имел ни малейшего представления об этом. Поэтому, пожалуйста, см. Приведенный ниже код, ошибку и предложите мне, как это сделать?Ошибка Meteor.setTimeout() в таймерах Meteor?

Ошибка:

Exception in setTimeout callback: TypeError: undefined is not a function 
    at _.extend.withValue (http://localhost:3000/packages/meteor.js?8ec262df25783897eaad01255bc8bd1ca4e78b24:773:17) 
    at http://localhost:3000/packages/meteor.js?8ec262df25783897eaad01255bc8bd1ca4e78b24:358:45 
    at http://localhost:3000/packages/meteor.js?8ec262df25783897eaad01255bc8bd1ca4e78b24:801:22 

JS код:

if (Meteor.isClient) 
{ 
    Meteor.setTimeout(Test("10"), 1000); 
    Meteor.setInterval(Test1, 1000); 

    Template.hello.greeting = function() 
    { 
    return "Welcome to timerapp."; 
    }; 

    Template.hello.events 
    ({ 
    'click input' : function() 
    { 
     // template data, if any, is available in 'this' 
     if (typeof console !== 'undefined') 
     console.log("You pressed the button"); 

     //Test(); 
    } 
    }); 
} 
function Test(x) 
{ 
    console.log("*** Test() ***"+x); 
} 
function Test1() 
{ 
    console.log("*** Test1() ***"); 
} 
if (Meteor.isServer) 
{ 

    Meteor.startup(function() 
    { 
    // code to run on server at startup 
    }); 


} 
+0

'Meteor.setTimeout' необходимо только на сервере, потому что код сервера должен работать в волокне. На клиенте нет волокон, поэтому вы можете просто использовать обычный глобальный 'window.setTimeout'. Тем не менее, вы должны передать объект функции, как отметил @Tobold. – sbking

ответ

20

Проблема заключается в том, что setTimeout ожидает функцию в качестве первого параметра, но вы передаете результат вычисления Test("10") который является «неопределенным».

Вы можете решить эту проблему, обернув свой призыв к Test1 в анонимной функции:

Meteor.setTimeout(function(){Test("10");}, 1000); 
+2

Это работало именно для того, для чего мне это нужно. В идеале вы должны сделать фактическую функцию для вызова, но это сработало для небольшого фрагмента. – Andy

Смежные вопросы