appData.points=rows[0]['points'];
работает только в том случае, если appData
было инициализировано другим обещанием первым.Но с Promise.all
любое обещание может быть выполнено первым.Если первое обещание разрешается вторым, оно просто переопределяет любое значение, которое appData
в настоящее время имеет.
Похоже, что вы используете обещания неправильно.Вместо того, чтобы использовать их с побочными эффектами (присваивая 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
, поэтому неясно, можно ли звонить только один раз.Но вам лучше понять, как использовать обещания.