0
它應該是完全可以運行類似以下內容:爲什麼我不能直接將Node請求方法傳遞給Bluebird承諾?
function someMiddleware (req, res, next) {
someAsyncBluebirdOperation().then(res.json);
}
但是,如果你傳遞一個res
對象的任何方法直接作爲一個決心處理程序的引用,你會得到下面的,無益的錯誤:
[TypeError: Cannot call method 'get' of undefined] __stackCleaned__: true
如果您纏繞調用另一個函數res.json
,一切似乎很動聽:
function someMiddleware (req, res, next) {
function wrapper(result) {
res.json(result);
}
someAsyncBluebirdOperation().then(wrapper);
}
我只能假設綁定/範圍發生了一些問題,但不得不將這個調用包裝到另一個函數中感覺完全沒有必要。
這不能解決問題。 '.then'方法只需要一個函數來調用。 'res.json'是一個函數。它應該接受它。 – duncanhall 2015-02-06 13:05:00
閱讀http://stackoverflow.com/a/18019561/4478897 – nada 2015-02-06 13:08:03
'res.json'不是一個函數,而是一個方法 - 這意味着它依賴於'this'。雖然在這種情況下它可能很煩人,但它比需要將它們與上下文相關聯的函數執行得更好,因爲它可以進行靜態分配。 'Response'類可以自動綁定它的方法,但是當'res.json'可以被正常調用作爲一種方法時(通常它可以),這是一個巨大的性能損失。 – Esailija 2015-02-06 13:19:03