0
我正在Express應用程序的端點中工作,並且它需要返回屬於特定用戶的一組Story記錄。我正在使用與請求一起提交的JSON Web令牌來標識用戶。從那裏,我找到他們相關的項目(通過連接表,UserProjects)。然後,我正在循環每個項目以查找其相關故事。獲取Sequelize Promises鏈的最終結果
最終,我需要一個故事數組作爲JSON返回給用戶。
router.route('/')
.get((request, response) => {
let token = request.headers['reax-tracker-access-token'];
jwt.verify(token, 'secret', (err, decoded) => {
User.find({ where: { id: decoded.user } })
.then((user) => {
return user.getProjects()
.then((projects) => {
return projects.map((project) => {
return project.getStories()
.then((stories) => {
return stories.map((story) => {
return story
})
})
})
})
})
.then((stories) => {
response.json(stories)
})
})
})
router.route('/:stories');
返回:
[
{
"isFulfilled": false,
"isRejected": false
},
{
"isFulfilled": false,
"isRejected": false
},
{
"isFulfilled": false,
"isRejected": false
}
]
這對我來說很有意義,因爲如果我用setInterval
在最後then
等待,我得到我期望的結果。
.then((stories) => {
return setInterval(function() {
response.json(stories)
}, 2000)
})
如何才能達到與適當的Promise語法的時間間隔相同的效果?
當您使用的承諾錯了 - 你可以返回,並把它們連沒有嵌套他們 - 建築非常差。與其提出所有這些要求,是否有任何一個你只能做出其中的一個或兩個?另外,問題出現在你使用不包含promise的'.map'的地方。 – Adam
另外,'return stories.map(story)=> {return story})'完全沒有成就。 – Adam
您應該使用預先加載來獲取一個查詢中的所有數據,而不是執行一堆嵌套查詢,如文檔中所述:http://docs.sequelizejs.com/en/v3/docs/models-用法/#熱切加載 –