2017-02-02 7 views
0

Я знаю, что это было предложено в сотни раз, однако я написал кучу функций обратного вызова прежде, и я думаю, что я только что немного слепой к моей проблеме/Обратный звонок не является функцией?

У меня есть функция:

function firstSend(){ 
    client.write(Buffer.from([0x5C,0x57,0x31,0x32,0x33,0x34,0x2F])); 

    check(function(msg){ 
     if(msg == true){ 
      console.log("Lets go"); 
     } 
    }); 
} 

это вызывает функцию check с обратным вызовом

функция проверки возвращает верно, когда она будет завершена:

function check(callback) { 
    let m; 
    if(message != null) m = message.trim(); 

    if(m != "OK"){ 
     setTimeout(check, 1000); 
     return; 
    } 
    return callback(true); 
} 

Все работает правильно, пока не попытается выполнить обратный вызов, и в этот момент он говорит мне, что это не функция.

Я вошел обратный вызов, и он входит в функции, так что я немного тупик

+1

Внутренние элементы 'setTimeout' не знают, что вы хотите передать' check', поэтому он ничего не пропускает. Вы можете решить эту проблему, передав функцию, которая закрывается над 'callback' и вызывает' check' с этим аргументом. 'setTimeout (() => check (callback), 1000)' –

+2

Другим решением является передача 'callback' в качестве отдельного аргумента в' setTimeout', который сообщает 'setTimeout', что вы хотите, чтобы он пересылался на' check' при вызове , 'setTimeout (check, 1000, callback)'. Он вариативен, и так много дополнительных аргументов, которые будут установлены в 'setTimeout', будут отправлены в вашу функцию. –

ответ

6

Вы не проходя callback в setTimeout

setTimeout(function() { 
    check(callback) 
}, 1000); 

на вместо

setTimeout(check, 1000); 

OR, Альтернативно вы можете использовать bind()

setTimeout(check.bind(null, callback), 1000);. 
+1

Альтернативно: 'check.bind (null, callback)'. – deceze

+0

Черт возьми. Полностью пропустил это. Благодаря! 'setTimeout (() => {check (callback)}, 1000);' – K20GH