2017-02-02 5 views
0

Ich weiß, das mehrere hundert Mal gefragt worden, aber ich habe viele Callback-Funktionen geschrieben, bevor und ich glaube, ich habe nur ein bisschen blind für mein Problem gegangen/Rückruf ist keine Funktion?

Ich habe eine Funktion:

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

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

, dass die Funktion check mit einem Rückruf

die Prüffunktion gibt true zurück, wenn es abgeschlossen ist ruft:

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

    if(m != "OK"){ 
     setTimeout(check, 1000); 
     return; 
    } 
    return callback(true); 
} 
Alles funktioniert ordnungsgemäß, bis es versucht, einen Rückruf durchzuführen, an dem es mir sagt, es ist keine Funktion.

Ich habe Rückruf abgemeldet und es meldet sich als eine Funktion, so bin ich ein wenig ratlos

+1

Die Interna von 'setTimeout' nicht wissen, was Sie' check' übergeben wollen, so ist es passiert nichts. Sie können dies lösen, indem Sie eine Funktion übergeben, die über Callback schließt und 'check' mit diesem Argument aufruft. 'setTimeout (() => check (callback), 1000)' –

+2

Eine weitere Lösung besteht darin, 'callback' als separates Argument zu' setTimeout' zu übergeben, das 'setTimeout' informiert, dass es beim Aufruf 'check' weitergeleitet werden soll . 'setTimeout (check, 1000, callback)'. Es ist variadisch, und so werden viele zusätzliche Argumente, die auf 'setTimeout' gesetzt werden, an Ihre Funktion gesendet. –

Antwort

6

Sie nicht die callback in setTimeout

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

statt

setTimeout(check, 1000); 
sind vorbei

OR, verwenden Sie können alternativ bind()

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

Alternativ: 'check.bind (null, callback)'. – deceze

+0

Ah, verdammt nochmal. Das habe ich komplett vermisst. Vielen Dank! 'setTimeout (() => {check (Rückruf)}, 1000);' – K20GH