异步检查数据库中各种循环子句中的数据的解决方案 [英] Asynchronously solution to check data from database kinds of loop clause
问题描述
我想做的是从数据库异步检查并从中获取结果?在我的应用程序中,我尝试实现Asynchronously
来解决此步骤
What I want to do is asynchronously check from database and get a result from it? In my application I am trying to implement Asynchronously
to resolve this steps as
- 将数据库中的手机号码作为
JsonArray
种循环子句 进行检查
- 从结果中创建
JsonArray
- 打印创建的数组
- Check mobile numbers from database as
JsonArray
kinds of loop clause - Create
JsonArray
from Result - Print created array
我对Promises
的了解足够多,可以编写以下连接,但是不幸的是,我的解决方案无法实现Asynchronously
,并且在控制台上得到多行结果.
I learned just enough about Promises
to write the following connection, but then unfortunately my solution could't be implemented Asynchronously
and I get multi row as result on the console.
1)第一步是将数据作为json数组传递,以检查数据库中的手机号码
1) First step is to pass data as json array to check mobile numbers from the database
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);
});
});
}
我的代码有什么问题?为什么我不能实现这一点?
What is my code problem? Why I can't implementing this?
推荐答案
您可以将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);
})
}
另请参见如何从异步调用?
这篇关于异步检查数据库中各种循环子句中的数据的解决方案的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!