Sequelize调用get({plain:true})加花括号返回undefined是什么原因?
问题原因
这个问题和Sequelize本身无关,属于JavaScript箭头函数的基础语法知识点疏漏:
箭头函数有两种使用形式,两种形式的返回值规则完全不同:
- 不带花括号的简写形式:箭头后直接跟表达式,函数会自动返回该表达式的执行结果,你修改后能正常运行的代码就是用了这种规则,自动把
message.get({plain: true})的执行结果返回给了map方法 - 带花括号的块级形式:花括号包裹的内容会被识别为独立的函数体代码块,函数默认不会返回任何值,必须手动添加
return关键字指定返回内容。你最开始的错误代码里,只在花括号内执行了message.get({plain: true})语句,没有写return把结果返回,所以map遍历得到的每一项都是undefined。
如果实际开发中需要在箭头函数内写多行处理逻辑,必须使用花括号的话,手动补充return即可正常运行:
const messages = dbMessagesData.map(message => { // 此处可添加其他业务逻辑 return message.get({plain: true}); });
内容的提问来源于stack exchange,提问作者Gianni Fontanot
相关产品推荐
相关产品推荐

