【发布时间】:2020-02-23 18:22:50
【问题描述】:
我想从一个 GET 请求中进行 2 个 MySQL 查询,将结果组合在一起并返回它们。但是我很难将第一个查询的结果传递给下一个 then() 块。
const express = require('express');
const router = express.Router();
const axios = require('axios');
const con = require('../../db');
router.get('/:id', (req, res, next) => {
axios.get('/').then(docs => { //get one book by its id number
const sql = "SELECT title, line, mage_edition FROM books WHERE id=" + req.params.id;
con.query(sql, (err, result) => {
if (err) {
throw err;
}
return result; //"result" shows proper value here
});
}).then(docs => { //get all the listings that appear inside that book
//How do I get "result" here?
const sql2 = "SELECT l.entry_id, e.title, e.kind, e.sort FROM links l INNER JOIN entries e ON l.entry_id = e.id WHERE book_id=" + req.params.id;
con.query(sql2, (err, result2) => {
if (err) {
throw err;
}
//combine result and result2, then give back with res.status(200).json()
})
});
});
module.exports = router;
任何帮助将不胜感激。我完成了一个关于异步 JavaScript 的培训视频系列,但我无法弄清楚这一点。
【问题讨论】:
-
我知道你的问题是关于链式承诺的,但在这种情况下,没有必要,你只需一条 SQL 语句就可以从数据库中获取所有信息。
-
trincot,在大多数情况下,这将是一个很好的建议。在我的情况下,这 2 个查询结果是如此不同,它需要更多的时间来“规范化”列以组合查询和额外的工作来理解结果。
标签: javascript node.js promise axios