gpt4 book ai didi

javascript - Nodejs 结合了我的 sql 命令的两个结果

转载 作者:行者123 更新时间:2023-11-30 11:53:07 24 4
gpt4 key购买 nike

我有两个 mySql 命令从数据库中获取结果,我试图用下面的代码获取它们,但它不能正常工作

例如:

userEwallets 表中获取结果:

function getMoneySenderUserInfo(data, callback) {
var sourceEwalletNumber = data.transferToEwallet.substring(0, 5) + data.registeredMobileNumber.substring(1, data.registeredMobileNumber.length);
var query = "SELECT userEwallets.id as ewalletId, users.id as userId , money_repositories.money as money FROM userEwallets " +
"JOIN users ON users.id = userEwallets.userId " +
"JOIN money_repositories ON userEwallets.id = money_repositories.ewalletId " +
"WHERE ewalletNumber = '" + sourceEwalletNumber + "' ";
connection.query(query, function (err, results) {
if (err) return callback(false);

if (results.length === 0) return callback(false);

callback(true, results[0]);
});
}

再次从userEwallets表中获取结果,得到其他结果:

function getDestinationTakeMoneyUserInfo(data, callback) {
var query = "SELECT users.id as userId FROM userEwallets " +
"JOIN users ON users.id = userEwallets.userId " +
"WHERE ewalletNumber = '" + data.transferToEwallet + "' ";
connection.query(query, function (err, results) {
if (err) return callback(false);

if (results.length === 0) return callback(false);

callback(true, results[0]);
});
}

现在我想将这个结果与这段代码结合起来:

usersInformation = {};
getMoneySenderUserInfo(data, function (success, result) {
if (success) {
usersInformation['senderId'] = result.userId;
usersInformation['ewalletId'] = result.ewalletId;
usersInformation['money'] = result.money;
getDestinationTakeMoneyUserInfo(data, function (success, result) {
usersInformation['destinationUserId'] = result.userId;
});
}
log.info(usersInformation);
});

最佳答案

你应该使用 Promise

举个例子

function getMoneySenderUserInfo(data) {

var promise = new Promise( function(resolve, reject) {
var query = "..."
connection.query(query, function (err, results) {
if (err || results.length === 0) {
reject();
} else {
resolve(results[0]);
}
});

return promise;
}

您必须为 getDestinationTakeMoneyUserInfo 函数做同样的事情

然后你可以得到这样的最终结果:

var usersInformation = {};
Promise.all([getMoneySenderUserInfo(data), getDestinationTakeMoneyUserInfo(data)])
.then(function (results) {
usersInformation['senderId'] = results[0].userId;
usersInformation['ewalletId'] = results[0].ewalletId;
usersInformation['money'] = results[0].money;
usersInformation['destinationUserId'] = result[1].userId;
});

如您所见,Promise.all 将等待两个数据库请求,回调(在 then 函数中传递)将在两个 promise 执行时被调用已解决,因此您最终可以检索这两个结果。

你也可以像这样链接 promise :

getMoneySenderUserInfo(data)
.then(function (result) {
usersInformation['senderId'] = result.userId;
usersInformation['ewalletId'] = result.ewalletId;
usersInformation['money'] = result.money;
return getDestinationTakeMoneyUserInfo(data);
}).then(function (result) {
usersInformation['destinationUserId'] = result.userId;
});

关于javascript - Nodejs 结合了我的 sql 命令的两个结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38900494/

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