异步检查数据库中各种循环子句中的数据的解决方案 [英] Asynchronously solution to check data from database kinds of loop clause

查看:97
本文介绍了异步检查数据库中各种循环子句中的数据的解决方案的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想做的是从数据库异步检查并从中获取结果?在我的应用程序中,我尝试实现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

  1. 将数据库中的手机号码作为JsonArray种循环子句
  2. 进行检查
  3. 从结果中创建JsonArray
  4. 打印创建的数组
  1. Check mobile numbers from database as JsonArray kinds of loop clause
  2. Create JsonArray from Result
  3. 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆