gpt4 book ai didi

javascript - 解决所有 promise 的问题

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

我有一个代码块,我想在其中连接两个数据库查询的结果。所以我尝试实现 Promises.all

 const promise_list = []
let appData = [];
let promise = new Promise((resolve, reject) => {
let database = new Database();
database.query(`select * from configuration where version = (select max(version) from configuration) OR version= ? ORDER BY version `, [req.body.app_version])
.then(rows => {
appData=rows[0];
database.close()
resolve()
}, err => {
return database.close().then(() => { throw err; })
})
.catch(err => {
console.log(err);
res.status(500).json("Database Error");
reject()
})
});
promise_list.push(promise)
let promise2 = new Promise((resolve, reject) => {
let database = new Database();
database.query(`select points from users where id=?`, [req.user.id])
.then(rows => {
appData.points=rows[0]['points'];
database.close()
resolve()
}, err => {
return database.close().then(() => { throw err; })
})
.catch(err => {
console.log(err);
res.status(500).json("Database Error");
reject()
})
});
promise_list.push(promise2)
Promise.all(promise_list).then(result => {
res.status(200).json(appData);
});

第二个查询有时有效,有时无效。可能是什么问题?

最佳答案

appData.points=rows[0]['points']; 仅当 appData 已由另一个 Promise 首先初始化时才有效。但使用 Promise.all 时,任一 Promise 都可以首先得到解决。如果第一个 promise 解决第二个,它将简单地覆盖 appData 当前具有的任何值。

看来您错误地使用了 promise 。您应该正确地解决它们,而不是使用它们带来副作用(分配给 appData)。

整个代码可以被清理很多,如下所示:

let database = new Database();
let promise = database.query(`select * from configuration where version = (select max(version) from configuration) OR version= ? ORDER BY version `, [req.body.app_version])
.then(rows => rows[0]);
let promise2 = database.query(`select points from users where id=?`, [req.user.id])
.then(rows => rows[0].points);

Promise.all([promise, promise2])
.then(
([appData, points]) => {
appData.points = points;
res.status(200).json(appData);
},
err => {
console.log(err);
database.close().then(() => {
res.status(500).json("Database Error");
});
}
);

不知道Database是做什么的,所以不清楚是否可以只调用一次。但它应该让您更好地了解如何使用 Promise。

关于javascript - 解决所有 promise 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53370089/

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