gpt4 book ai didi

javascript - 如何在 JavaScript Promise 中将一个 then() block 的结果传递到下一个 then() block ?

转载 作者:行者123 更新时间:2023-12-01 00:30:31 25 4
gpt4 key购买 nike

我想通过一个 GET 请求进行 2 个 MySQL 查询,将结果组合在一起并返回它们。但我很难将第一个查询的结果传递到下一个 then() block 。

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 的培训视频系列,但我无法弄清楚这个。

最佳答案

问题是您的查询调用不会返回 promise ,它只是在完成时调用回调。如果您使用的任何数据库库不支持返回 promise ,我建议您为返回 promise 的查询方法创建包装函数。这将使将它们链接到 promise 中变得更加容易。

类似这样的事情:

function queryPromise(con, sql) {
return new Promise((resolve, reject) => {
con.query(sql, (err, result) => {
if (err) { return reject(err); }
return resolve(result);
});
});
}

关于javascript - 如何在 JavaScript Promise 中将一个 then() block 的结果传递到下一个 then() block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58591718/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com