我看了你的代码 https://github.com/WUDANRU/blog-1-promise-test- ,找到问题了,帮你分析一下。
第一,你代码中 src/router/blog.js 57 行开始,处理 /api/blog/new 路由,返回的是一个 promise
if (method === 'POST' && req.path == '/api/blog/new') {
// 之前的;
// const data = newBlog(req.body) //controller的blog.js(blogData = {}等于req.body
// return new SuccessModel(data)
// 现在的:
req.body.author = 'zhangsan' //新建博客没有author,写一个author的假数据 (假数据,待开发登录时再改成真实数据)
const result = newBlog(req.body) //result是controller/blog.js的id(id: insertData.insertId)
return result.then(data => { //postman显示404 not found,所以需要return promise(虽然没有return但是数据的值(conroller/blog.js)是有插入,可以在mysql测试有没有插入:select * from blogs;)
console.log('datadata', data) //{ id: 17 }
return new SuccessModel(data)
})
}
第二,你代码中,app.js 52行开始,接收到的数据,肯定就是上面所说的 promise 对象
if (blogData) {
console.log('blogblog', blogData) // 老师这个显示Promise { <pending> },但是cmd能显示出{id:28},postman显示的是{}
res.end(
JSON.stringify(blogData) //postman的send后的body显示错的{},因为blogData不对
)
return
}
promise 是一个异步,你没等它执行完,直接 res.end ,那可定是拿不到值的。
第三,你再看看讲师的代码,代码中做了改动,等 then 之后再 res.end(还把之前代码做了注释,来对比)
最后,我好奇问一下。我一直建议你自己去顺着代码逻辑排查 bug ,但是你一直没查到。到底是什么原因呢?
promise 的基本应用没搞懂?
没仔细去查?
查了,但是逻辑没看明白?
还是其他?
因为回答你这个问题,占据了我太多的事件,希望你能回复一下,我也借机去看看课程是否真的有遗漏。