gpt4 book ai didi

javascript - 从数据库检查数据的异步解决方案各种循环子句

转载 作者:行者123 更新时间:2023-12-03 06:22:29 25 4
gpt4 key购买 nike

我想要做的是异步检查数据库并从中获取结果?在我的应用程序中,我尝试实现异步来将此步骤解决为

  1. 从数据库中检查手机号码作为 JsonArray 类型的循环子句
  2. 从结果创建 JsonArray
  3. 打印创建的数组

我对 Promises 的了解足以编写以下连接,但不幸的是,我的解决方案无法异步实现,并且我在控制台上得到多行结果.

1) 第一步是将数据作为 json 数组传递,以从数据库中检查手机号码

registeredUsers(data)
.then(function (value) {
console.log('Contents: ' + value);
}).catch(function (v) {
console.log("faile");
});

2) 之后我在 Promise

中有两个函数
function registeredUsers(data) {
return new Promise(function (resolve, reject) {
var accountNumbers = [];
for (var i = 0; i < data.length; i++) {
var mobileNumber = data[i].mobileNumber.substr(1, data[i].mobileNumber.length);
checkUserMobileNumberAsEwallet(mobileNumber).then(function (mobileNumber) {
accountNumbers.push({ewalletNumber: mobileNumber});
}).catch(function (v) {
reject(false)
});
}
console.log(accountNumbers);
resolve(accountNumbers);
});
}

function checkUserMobileNumberAsEwallet(mobileNumber) {
return new Promise(function (resolve, reject) {
var query = "SELECT id FROM userEwallets WHERE ewalletNumber LIKE '%" + mobileNumber + "'";
connection.query(query, function (err, results) {
if (err) return reject(false);

if (results.length > 0)
resolve(mobileNumber);
});
});
}

我的代码有什么问题?为什么我无法实现这个?

最佳答案

您可以用 Promise.all()Array.prototype.map() 替换 for 循环

function registeredUsers(data) {
return Promise.all(data.map(function(curr, i) {
var mobileNumber = curr.mobileNumber.substr(1, curr.mobileNumber.length);
return checkUserMobileNumberAsEwallet(mobileNumber)
.then(function (_mobileNumber) {
return {ewalletNumber: _mobileNumber};
});
}))
.then(function(accountNumbers) {
console.log(accountNumbers);
return accountNumbers
})
.catch(function(err) {
console.log(err);
})
}

另请参阅How do I return the response from an asynchronous call?

关于javascript - 从数据库检查数据的异步解决方案各种循环子句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38806097/

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