Я новичок в экспрессе и секвелизе.Я пытаюсь вызывать комментарии пользователей с ответами, используя обещание от экспресс-маршрутизатора, но это не работает, пожалуйста, помогите мне решить эту проблему.
Сначала я использовал var loopIndex = 0
для проверки длины записи, зарегистрированной пользователями.Работает нормально.
1.Детали маршрутизатора
router.get('/show', function(req, res){
models.post.findAll({
order: [["createdAt", "DESC"]]
})
.then(function(result){
var loopIndex = 0
for(let post of result){
models.post.find({
include: {model: models.reply, where: {postId: post.id}}
})
.then(function(result2){
if(result2){
post.replies = result2.replies
}
loopIndex++
if(loopIndex === result.length){
res.render('show', {
posts: result
})
}
})
}
})
.catch(function(err){
console.log(err)
})})
2.файл ejs
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
</head>
<body>
<h1>Add comments</h1> <hr>
<form action="/create" method="POST">
<table style="margin-bottom:50px;">
<tr>
<td>
<input type="text" name="inputTitle" placeholder="Title.">
</td>
</tr>
<tr>
<td>
<input type="text" name="inputWriter" placeholder="Author.">
</td>
</tr>
<tr>
<td>
<input type="submit" value="Submit">
</td>
</tr>
</table>
</form>
<% for(let post of posts) { %>
<table style="border: solid black 1px; margin-bottom:30px;">
<tr>
<td>Title</td>
<td>Author</td>
<td>Date</td>
</tr>
<tr>
<td><%= post.title %></td>
<td><%= post.writer %></td>
<td><%= post.createdAt %></td>
<td><button ><a href="/edit/<%=post.id%>">Edit</a></button></td>
<td><button ><a href="/delete/<%=post.id%>">Delete</a></button></td>
</tr>
<tr>
<td><hr></td>
</tr>
<form action="/reply/<%=post.id%>" method="post">
<tr>
<td><input type="text" name="replyWriter" placeholder="Author"></td>
<td><input type="text" name="replyContent" placeholder="Description"></td>
</tr>
<tr>
<td><input type="submit" value="submit"></td>
</tr>
</form>
</table>
<% if(post.replies){for(let reply of post.replies)
{ %>
<tr>
<td><%= reply.dataValues.writer %></td>
<td><%= reply.dataValues.content %></td>
</tr>
<% } %>
<% } %>
<% } %>
</body>
</html>
Я пытался создавать коды, используя обещание.но это не работает.
3.Модифицированные коды, использующие обещание
var post_reply = new Promise(function(result){
models.post.findAll({
order: [["createdAt", "DESC"]]
})
.then(function(result){
for(let post of result){
models.post.find({
include: {model: models.reply, where: {postId: post.id}}
})
.then(function(result2){
if(result2){
post.replies = result2.replies
}
})
}
})
return result
})
router.get('/show', function(res, req){
post_reply.then(function(result){
res.render('show', {
posts: result
})
}).catch(function(err) {
console.log(err)
})
})
Есть ли проблема для цикла или вложенной функции?