Recentemente, escrevi sobre o uso de Node.js com Swagger para criar um ouvinte simples para o Gateway de sincronização feed de alterações. Nessa versão, eu fazia tudo usando chamadas síncronas. Como estou trabalhando para criar uma solução mais completa, decidi passar a usar Promises. Optei por usar a função Pássaro azul Biblioteca de promessas. O Bluebird tem alguns recursos interessantes em relação à versão integrada.
O problema
Deparei-me com um problema que demorei um pouco para resolver. O Bluebird tem uma função útil retorno
. É apenas uma abreviação para a criação de uma Promessa que resolve o valor fornecido. Você a utiliza da seguinte forma:
1 2 |
doSomething() .retorno("Valor não relacionado"); |
No entanto, quando usei isso, continuei recebendo erros:
1 |
TypeError: doSomething().retorno é não a função |
Isso foi realmente intrigante no início, pois as construções mais complicadas estavam funcionando bem.
A solução
O Bluebird foi criado para entrar e substituir a implementação padrão do Promises. No entanto, o Cliente Swagger JS usa o Q Promete explicitamente a biblioteca.
Isso significa que as promessas retornadas por minhas chamadas para os endpoints do Sync Gateway estavam sendo substituídas pela versão Q. Como o Bluebird e o Q compartilham grande parte de sua API principal, foi preciso investigar um pouco para perceber o que estava acontecendo.
Há algumas maneiras de resolver isso. Desde que retorno
é uma rotina tão simples que decidi continuar usando o equivalente então
ligar.
Aqui estão algumas alternativas para você experimentar, se quiser:
promisifyAll
Swagger em vez de usar o suporte interno do Swagger- Use o projeto "bluebird-q" para substituir o Q pelo Bluebird
- Encerre as chamadas com
Promise.resolve()
Pós-escrito
Confira mais recursos em nosso portal do desenvolvedor e nos siga no Twitter @CouchbaseDev.
Você pode postar perguntas em nosso fóruns. E participamos ativamente de Estouro de pilha.
Você pode me seguir pessoalmente em @HodGreeley.