1
我看過this函數。有人可以解釋這個遞歸函數MongooseJS
我可以看到它生成一個slu but,但我不太明白它是如何工作的。 在線327
它返回來自Model.findOne
函數的承諾,但在該函數的回調函數內,它們遞歸地再次調用從321
行開始的外部函數。
任何人都可以幫助我嗎?我需要產生一些獨特的slu and,這似乎是一個解決方案 - 如果我能理解它。
我看過this函數。有人可以解釋這個遞歸函數MongooseJS
我可以看到它生成一個slu but,但我不太明白它是如何工作的。 在線327
它返回來自Model.findOne
函數的承諾,但在該函數的回調函數內,它們遞歸地再次調用從321
行開始的外部函數。
任何人都可以幫助我嗎?我需要產生一些獨特的slu and,這似乎是一個解決方案 - 如果我能理解它。
checkIfSlugExists
函數在你的例子中確保沒有數據庫中已經存在slugToFind
slug的文檔。
checkIfSlugExists
不是簡單地檢查slu if是否空置,但它也有一些故障轉移機制。那麼,到底它返回一個承諾,一個空置的毛坯:
slugToFind
在數據庫中不存在,那麼它的返回(線331
)。checkIfSlugExists
檢查longSlug
(行338-341
),這只是原始slugToFind
的較長版本。slugToFind
和longSlug
已經存在時,則開始checkIfSlugExists
號碼添加到longSlug
(線344-355
)中,從2開始,直到它找到一個空的蛞蝓。每一次checkIfSlugExists
想要檢查一些新的slug它遞歸調用自己與這個新的價值。
讓我困惑的事情主要是承諾內的遞歸函數調用。它在承諾的內部返回一個承諾......? – ptf 2014-11-24 15:44:58
是的。當你用'.then'鏈接一個承諾時,所得到的承諾將被解析爲從'.then'回調返回的值。但是,當你從'.then'回調中返回一個承諾時,它首先得到解決。 – 2014-11-24 15:50:26
因此,從第一個'checkIfSlugExists'調用返回的promise將使用遞歸鏈中返回的最後一個promise的值來解析。 – 2014-11-24 15:51:25