在Sails框架中创建新记录时如何正确使用await?
在Sails框架中使用await关键字的正确姿势
兄弟,你的代码报错主要有两个核心问题,我帮你捋捋:
首先,await只能在async函数里使用,你现在的create action是普通函数,没加async关键字,这是第一个坑。
其次,当你用await调用Waterline的模型方法时,不需要再传回调函数了——await本身就是用来替代回调的,直接接收返回结果,用try/catch来捕获错误就行。你原来的写法把回调和await混在一起,反而会出问题。
给你改好的代码:
create: async function (req, res, next) { try { // 用await直接获取创建后的记录,不需要回调 var new_place = await Place.create({...}).fetch(); console.log(new_place); return res.json({'status':true,'result':new_place}); } catch (err) { // 捕获错误,处理无效属性的情况 if (err.invalidAttributes) { return res.json({'status':false, 'errors':err.invalidAttributes}); } // 其他未知错误可以统一处理 return res.json({'status':false, 'errors':'未知错误'}); } }
最后补充几个注意点:
- 必须给action函数加上
async前缀,这是使用await的前提条件。 - Waterline的
fetch()方法不能省略,否则await拿到的是未执行的查询对象,不是实际创建的数据记录。 - 用try/catch包裹await代码块,能覆盖所有可能的错误场景,包括字段验证失败、数据库连接异常等。
内容的提问来源于stack exchange,提问作者mas cm
相关产品推荐
相关产品推荐

