Node.js-错误使用诺言

时间:2019-06-22 17:05:46

标签: node.js sql-server asynchronous promise

我有以下异步方法:

alreadyLoaded: async function (id) {
        const pool = await poolPromise;
        return pool.request()
                        .input('idParameter', id)
                        .query('SELECT count(*) AS value FROM dbo.partidos WHERE id=@idParameter')
                        .then(result => {
                            console.log(result.recordset[0].value)
                            result.recordset[0].value > 0
                        }).catch(function(err) {
                            console.log(err.message);
                        }); 

又调用了一个:

processMatches: function(payload) {
    payload.matches.forEach(p => {

      if(partidosRepository.alreadyLoaded(p.id))
      {
        console.log("El partido ya fue cargado.");

        return;
      }

alreadyLoaded方法检查数据库中是否已插入某些记录,并在另一个方法中调用该记录以进行验证。这里的问题是processMatches方法在alreadyLoaded完成当前记录之前继续处理记录。

我在这里对承诺的管理有误,有人可以帮我解决这个问题吗?

这是数据库连接:

const poolPromise = new sql.ConnectionPool(config)
                .connect()
                .then(pool => {
                    console.log('Connected to localhost '+ config.database +' database');
                    return pool;
                })
                .catch(err => console.log('Database connection failed. Error: ', err));
module.exports = {
    sql, poolPromise
}

1 个答案:

答案 0 :(得分:0)

为什么不建立这样的if语句

R: ff
G: 0
B: 0

R: ff
G: 0
B: 0

R: ff
G: 0
B: 0

R: 0
G: ff
B: 0

R: 0
G: ff
B: 0

R: 0
G: ff
B: 0

R: 0
G: 0
B: ff

R: 0
G: 0
B: ff

R: 0
G: 0
B: ff

还请记住,您此处未返回布尔值

R: ff
G: 0
B: 0

R: ff
G: 0
B: 0

R: ff
G: 0
B: 0

R: 0
G: 0
B: 0

R: 0
G: ff
B: 0

R: 0
G: ff
B: 0

R: 0
G: ff
B: 0

R: 0
G: 0
B: 0

R: 0
G: 0
B: ff

R: 0
G: 0
B: ff

R: 0
G: 0
B: ff

R: 0
G: 0
B: 0