2016-02-01 6 views
6

Ich verwende bluebird Bibliothek über memcached.mit Bluebird mit undefined Erfolg Callback-Funktion

memcached.set('foo', 'bar', 10, function (err) { /* stuff */ }); 

diese Funktion Erfolg Rückruf nicht scheint in zweitem Parameter nennen, so wie .then (res) Funktion aufgerufen nicht immer.

Promise.promisifyAll(memcached); 
memcached.setAsync(hashedCacheKey, obj).then(function (res) { 
      resolve(res); 
     }).catch(function (err) { 
      reject(err, null); 
     }); 

Gibt es irgendeine Möglichkeit für mich, unangekündigte Erfolgsereignisse zu behandeln?

+0

Was ist 'setAsync'? – raina77ow

+0

@ raina77ow es wird nach "Promise.promisifyAll (memcached) generiert" Ich habe meinen Beitrag bearbeitet. –

+0

Sidenote, es sieht so aus, als würden Sie Ihre Logik unnötigerweise in einen "neuen Promise" -Konstruktor einbetten. – Retsam

Antwort

4

Das primäre Problem hier ist, dass Sie kein Timeout-Argument memcached.setAsync bereitstellen, aber es ist ein obligatorisches Argument für memcached.set. Diese zwei Zeilen sind äquivalent:

memcached.set("foo", "bar",() => { /* this is never called */ }); 
memcached.setAsync("foo", "bar").then(() => { /* this is never called, either */ }) 

Fügen Sie ein Timeout-Argument hinzu, und Ihr Code sollte wie erwartet funktionieren.

+0

Das funktioniert jetzt, großartig. –