如何在JavaScript中解析MySQL嵌套查询返回的字符串化answers字段
问题根源
Array.forEach()本身没有返回值,执行后返回undefined,你把forEach的执行结果传入Promise.resolve(),自然then回调里拿到的就是undefined- 调用
JSON.parse()后没有把解析结果赋值回result.answers字段,解析后的结果直接被丢弃,原对象没有被修改 - 解析操作是同步执行的,不需要额外用
Promise封装 - 原判断条件
result['answers'] !== undefined不严谨,你的数据里存在answers为null的情况,应当判断为answers非null时才执行解析 - 你在解析逻辑执行完成前就调用了
res.json(),返回给客户端的依然是未处理的原始数据
修复后代码
db.query(query, [req.query['product_id'], req.query['count']], (error, results) => { if (error) { console.log('err err ', error); return res.status(500).json('Database query error') } if (!results.length) { return res.json('No questions found') } // 同步遍历解析answers字段 results.forEach(result => { if (result.answers !== null) { result.answers = JSON.parse(result.answers) } }) // 处理完成后再返回结果 res.json(results.slice(0, req.query['count'])); })
可选的map写法
如果你不想修改原results数组,可以用map生成新的处理后数组:
const processedResults = results.map(result => { if (result.answers === null) return result return { ...result, answers: JSON.parse(result.answers) } }) res.json(processedResults.slice(0, req.query['count']))
内容的提问来源于stack exchange,提问作者Callum Reid
相关产品推荐
相关产品推荐

