Hace poco escribí sobre el uso de Node.js con Swagger para crear un receptor sencillo para el Pasarela de sincronización alimentación de cambios. En esa versión hice todo usando llamadas síncronas. Estoy trabajando para construir una solución más completa, así que decidí cambiar a usar Promises. Opté por utilizar el Bluebird Biblioteca de promesas. Bluebird tiene algunas características interesantes sobre la versión incorporada.
El problema
Me encontré con un problema que tardé un poco en resolver. Bluebird tiene una práctica función devolver
. Es una forma abreviada de crear una Promise que resuelva el valor dado. Se usa así:
1 2 |
hacerAlgo() .devolver("Valor no relacionado"); |
Sin embargo, cuando usé esto, seguí recibiendo errores:
1 |
TypeError: hacerAlgo().devolver es no a función |
Esto fue realmente desconcertante al principio, ya que las construcciones más complicadas funcionaban bien.
La solución
Bluebird está diseñado para reemplazar la implementación estándar de Promises. Sin embargo, el Cliente Swagger JS utiliza el Q Promete biblioteca explícitamente.
Esto significa que las promesas devueltas por mis llamadas a los puntos finales de Sync Gateway estaban siendo reemplazadas por la versión Q. Dado que Bluebird y Q comparten gran parte de su API central, me costó un poco darme cuenta de lo que estaba pasando.
Hay varias formas de abordar esta cuestión. Desde devolver
es una rutina tan simple, que decidí seguir utilizando el equivalente entonces
llamar.
Aquí tienes algunas alternativas que puedes probar si quieres:
promisifyAll
Swagger en lugar de utilizar el soporte integrado de Swagger- Utilice el proyecto "bluebird-q" para sustituir Q por Bluebird
- Envuelva las llamadas con
Promise.resolver()
Posdata
Consulte más recursos en nuestra portal para desarrolladores y síganos en Twitter @CouchbaseDev.
Puede enviar preguntas a nuestro foros. Y participamos activamente en Stack Overflow.
Puede seguirme personalmente en @HodGreeley.