2017-01-22 33 views
0

我使用Swagger創建我的JS API客戶端來調用一組REST端點。我正在配置Swagger客戶端以使用Promises(new Swagger({ spec: spec, usePromise: true }))。Bluebird Promise with Swagger:return不是函數

I require藍鳥在Swagger之前,要使用藍鳥承諾。但是我的應用在嘗試使用Promise.return時炸燬了。

代碼看起來像

client.user.get_db_user(db).return("foo"); 

其中客戶機是揚鞭參考。

我得到的錯誤是

app: TypeError: client.user.get_db_user(...).return is not a function 

它的工作原理,如果我有then(() => value)取代returnreturn應該是這種使用then的簡寫。

經過調查,我發現它在Swagger客戶端返回的承諾上失敗。

發生了什麼事?

回答

1

事實證明,Swagger明確地使用了Q promise庫。

藍鳥和Q是部分兼容的,所以很多事情都很好。嘗試使用Q不具備的Bluebird API的某些部分時會出現問題。

特別是,藍鳥有「返回」,而Q不。

最簡單的答案是使用問題中討論的then構造。

其他可能的解決方案我還沒有嘗試:

  1. 使用「藍鳥-Q」項目,藍鳥更換Q值。
  2. promisifyAll揚鞭而不是使用揚鞭的內置承諾支持。
2

它不會出現,你可以告訴揚鞭使用藍鳥承諾。但是,當你想使用藍鳥的方法的具體地方,你可以在「投」一揚鞭承諾到藍鳥承諾,然後用藍鳥的功能。要轉換這樣一個承諾,你只是把它包在Promise.resolve()

const Promise = require('bluebird'); 

Promise.resolve(client.user.get_db_user(db)).return(...) 

雖然在這個特定的情況下,由於.return()就在那裏爲您節省一些打字,它是不是真的後淨儲蓄你已經包裹了以前的承諾Promise.resolve()。但是,對於像.map()或者類似的一些更有意義的方法,這可能是更加有用。

相關問題