在继续之前需要等待循环完成执行的可能性有多大

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在继续之前需要等待循环完成执行的可能性有多大相关的知识,希望对你有一定的参考价值。

我有一个简单的for循环,如下所示:

var array = [];

for (var key in results) {
    con.query('SELECT * FROM table WHERE id = ?', [results[key]], function (err, res, fie) {
        array.push(res);
    });
}

res.json({result: array});

循环中的代码需要一些时间来执行,因此在循环有时间完成之前发送结果,因此我的数组的值不正确。

我查了一下,但找不到对此案的正确答复。我想知道我的代码在继续之前等待循环完全执行的可能性是什么?

谢谢,任何帮助非常感谢

答案

如果你永远不让jfriend知道你正在使用什么数据库,这里应该有用

// a "promisified" con.query ... though, not sure what the `fie` argument is
// as it's not used, it wont matter

const queryP = (sql, ...args) => 
    new Promise((resolve, reject) => 
        con.query(sql, ...args, (err, res, fie) => 
            err ? reject(err) : resolve(res)
        )
    );

现在,您的代码可以编写

results // if results is an Object, use: Object.values(results) instead
.map(result => queryP('SELECT * FROM table WHERE id = ?', result))
.then(result => res.json({result}));

以上是关于在继续之前需要等待循环完成执行的可能性有多大的主要内容,如果未能解决你的问题,请参考以下文章

函数在继续循环之前不等待条件完成

javascript:循环中如何等待方法完成了再继续?

Javascript:在循环继续之前等待函数结束[重复]

如何在继续之前等待所有 multiprocessing.Processes 完成?

在性能开始下降之前 MySQL 数据库可以有多大

如何让一个方法在继续执行之前等待另一个(异步)方法完成?