Node.js中Controller调用Service层异步函数无返回值问题
问题根因
你没有执行Service层导入的fetchReviews异步函数,只是在await这个函数本身,所以函数内部逻辑完全没有触发。
从你打印的日志"Inside controller": [AsyncFunction: fetchReviews]就能直接验证:data拿到的是函数类型的引用,不是函数执行后的返回结果。
JS里的async关键词修饰的函数,只有加括号调用之后,才会返回内部逻辑对应的Promise对象;如果只写函数名不加括号,拿到的只是函数的定义本身,不会运行内部的任何代码,自然Service里的console.log不会执行,也拿不到数据库查询结果。
修复方案
修改Controller层的调用代码,给fetchReviews加上调用括号即可,修正后的代码如下:
const {fetchReviews} = require('../services/getReviews.service'); const getReviews = async (req,res) => { // 注意fetchReviews后添加了(),表示执行该异步函数 const data = await fetchReviews(); console.log("Inside controller:",data); return res.status(200).send({"reviews": data }); }
补充说明
await关键字如果接收到的不是Promise类型的值,会直接把这个值作为等待结果返回,不会做额外处理。你之前的写法里await接的是函数对象,属于非Promise值,所以直接把函数本身赋值给了data,全程没有触发数据库查询逻辑。
内容的提问来源于stack exchange,提问作者Digvijay Singh Thakur
相关产品推荐
相关产品推荐

