在 node.js 中调用异步函数
Posted
技术标签:
【中文标题】在 node.js 中调用异步函数【英文标题】:Calling async function in node.js 【发布时间】:2018-01-04 07:38:15 【问题描述】:我有一个异步函数
async function getPostAsync()
const post = await Post.findById('id');
// if promise was successful,
// but post with specific id doesn't exist
if (!post)
throw new Error('Post was not found');
return post;
我正在调用函数
app.get('/', (req, res) =>
getPostAsync().then(post =>
res.json(
status: 'success',
);
).catch(err =>
res.status(400).json(
status: 'error',
err
);
)
);
但我只是收到
"status": "error",
"err":
我希望得到错误Post was not found
或连接错误或类似的东西,但变量err
在我的catch
语句中只是一个空对象。
【问题讨论】:
Post.findById
是否返回一个 Promise?
是的。来自mongoose
尝试在你的catch块中发送完整的错误对象:err: JSON.stringify(err)
,错误对象可能不包含消息,因为err
在响应中是空字符串。跨度>
当你 console.log(post)
在你的 getPostAsync()
函数中返回它之前会发生什么?
我发现模型Post
没有被导入。它应该以Post is undefined
之类的方式失败。如何确保我得到这些错误?
【参考方案1】:
考虑以下几点:
let e = Error('foobar');
console.log( JSON.stringify(e) )
这输出,就像你的情况一样。那是因为错误不能很好地序列化为 JSON。
试试这个:
res.status(400).json(
status : 'error',
err : err.message // `String(err)` would also work
);
【讨论】:
以上是关于在 node.js 中调用异步函数的主要内容,如果未能解决你的问题,请参考以下文章
当循环中调用了异步函数时,Node.JS 将如何处理循环控制?