我在Express应用中的端点工作,需要返回一组属于特定用户的Story记录。我使用随请求提交的JSON Web令牌来识别用户。从那里,我找到了他们的相关项目(通过连接表,UserProjects)。然后,我循环遍历每个项目以查找其相关的故事。
最终,我需要一系列故事作为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语法获得与间隔相同的效果?
答案 0 :(得分:0)
在阅读了原始问题的评论并花了更多时间阅读Sequelize文档后,我找到了解决我遇到的问题的方法。这个版本避免了@Adam指出的一些嵌套,它利用了Sequelize @Jordan指出的热切加载功能。我相信它仍然可以改进,我很乐意提供任何有关如何操作的建议。
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 UserProject.findAll(
{
where: {
userId: user.id
}
})
})
.then((userProjects) => {
let projectIds = userProjects.map((up) => {
return up.dataValues.projectId
})
return Story.findAll({
where: {
projectId: projectIds
}
})
})
.then((stories) => {
response.status(200).json(stories)
})
})
})
我做错的一件大事就是返回非Promise并试图用then
次调用链接它们:
.then( (projects) => {
return projects.map( (project) => {
return project.getStories()
.then( (stories) => {...
答案 1 :(得分:0)
我在接收时遇到了类似的问题
from itertools import permutations
a=[[0,1,3],[4,2]]
a1=a[0]
a2=a[1]
a3=a1.copy()
a3.extend(a2)
perms=list(permutations(a3, 2))
print(perms)
new_arr = []
for i in perms:
if (i[0] in a1 and i[1] in a1) or (i[0] in a2 and i[1] in a2):
new_arr.append(1)
else:
new_arr.append(0)
print(new_arr)
使用 sequelize 创建实体之后。最终,我只是忘了{
"isFulfilled": false,
"isRejected": false
}
await
调用。添加 repository.create<>(...data)
后,一切都如预期。