2016-02-01 38 views
6

Używam biblioteki bluebird przez memcached.używanie bluebird z niezdefiniowaną funkcją powodzenia oddzwonienia

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

ta funkcja nie wywołuje oddzwaniania powodzenia w drugim parametrze, więc wydaje się, że funkcja .then (res) nie jest wywoływana.

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

jest jakiś sposób dla mnie obsłużyć zdarzenie nieopłacony sukces?

+0

Co to jest 'setAsync'? – raina77ow

+0

@ raina77ow jest generowany po "Promise.promisifyAll (memcached);" Zmieniłem mój post. –

+0

Sidenote, wygląda na to, że możesz niepotrzebnie owijać swoją logikę w konstruktor 'nowej obietnicy'. – Retsam

Odpowiedz

4

Głównym problemem jest to, że nie podajesz argumentu limitu czasu dla memcached.setAsync, ale jest to obowiązkowy argument dla memcached.set. Te dwie linie są równoważne:

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

Dodaj argument limitu czasu, a kod powinien działać zgodnie z oczekiwaniami.

+0

To działa, świetnie. –