【发布时间】:2020-09-14 13:49:54
【问题描述】:
在这段代码中,我试图查看用户迄今为止发布的所有文章。每当用户创建新文章时,我都会动态添加列。所以我创建了一个数组来仅存储稍后的文章应该在 ejs 文件上呈现。
app.get('/users/article/feed',checkAuthenticated,(request,response)=>{
let articleArray=[]
const sql="SELECT noOfArticles FROM Articles WHERE id=?"
db.query(sql,[request.user.id], async (err,result)=>{
if(err) throw err
let noOfArticles=result[0].noOfArticles
let promise=new Promise((resolve,reject)=>{
for(let i=1;i<=noOfArticles;i++){
const sql1="SELECT ?? FROM Articles WHERE id=?"
let index='article'+i
db.query(sql1,[index,request.user.id],(err,result)=>{
if(err) throw err
articleArray.push(result[0][index])
})
if(articleArray.length===noOfArticles){
resolve(articleArray);
}
} //end of for loop
})//end of promise function
let resultFinal=await promise;
console.log(resultFinal)
})
response.render('viewArticles',resultFinal)
})
我猜异步等待部分有一些错误。 resultFinal 没有记录。我该如何解决这个问题
【问题讨论】:
-
在任何请求发出之前,您正在同步检查
articleArray.length -
那我该如何解决呢??
-
通过检查之后请求返回的长度。您还应该正确处理错误 - 目前,如果有错误,Promise 将永远不会解决
-
你能发布正确的答案吗?我是 js 的新手。添加 try catch 语句后无法获得输出?
标签: mysql node.js express asynchronous async-await