2016-09-19 2 views
-2

Ich bin auf der Suche nach einem Dienstprogramm, das sicherstellen, dass nur der erste Aufruf des Rückrufs ausgeführt wird.So stellen Sie sicher, dass ein Node.js-Stil Rückruf es nur einmal aufgerufen wird

Ich weiß, dass Sie etwas wie Code unten tun können, aber ich suche nach dieser Funktionalität in einigen populären Dienstprogramm wie lodash/undercore/async, die genau dies tut.

function once(fun){ 
    let called = false; 

    return function(){ 
    if(!called){ 
     const result = fun(...arguments); 
     called = true; 
     return result; 
    } 
    } 
} 
+2

Ihre Implementierung sollte wahrscheinlich das Ergebnis von 'Spaß' zurückgeben, nur für den Fall – Eric

+0

guten Punkt - ich würde es für Rückrufe verwenden, Rückrufe sollten keine Werte zurückgeben –

+1

Vielleicht sollte die Rückkehr nach der Einstellung aufgerufen werden? – Eric

Antwort

2

Unders bietet _.once

Lodash bietet _.once

Wenn Sie dies für asynchronen Code verwenden, können Sie feststellen, dass verspricht eine bessere Abstraktion bieten.


Ich bin für diese Funktionalität in einigen populären Dienstprogramm suchen, wie lodash/Strich/Asynchron

Sind Sie? Klingt so, als ob du nicht wirklich hinschaust. Hast du versucht, [deinen Bibliotheksnamen] [den Namen, den du deiner Funktion gegeben hast] zu googeln?

+1

Es gibt auch das Paket "einmal" (https://github.com/isaacs/once). – robertklep

+0

Ich schaute auf "einmal" lodash, aber ich bin nicht 100% sicher, ob es eine gute Wahl für asynchronen Code ist, denn für jeden Anruf nach dem ersten gibt es den ursprünglichen Aufruf Wert zurück. –

+1

@JanOsch: Was würdest du lieber machen? – Eric

Verwandte Themen