Mysql Node.js防止在setInterval内堆叠异步函数

Mysql Node.js防止在setInterval内堆叠异步函数,mysql,node.js,Mysql,Node.js,我有一个设定的时间间隔快速运行SQL查询。查询平均需要0.0003秒才能完成。但是,在极少数情况下,查询结果可能会超过100ms setInterval(function(){ Data = sql.Query(SqlData); },1000/30); 我想确保一次执行的sql.Query(SqlData)不超过一个。您可以在回调中再次启动查询 query(); function query(){ Data = sql.Query(SqlData, function(){

我有一个设定的时间间隔快速运行SQL查询。查询平均需要0.0003秒才能完成。但是,在极少数情况下,查询结果可能会超过100ms

setInterval(function(){
Data = sql.Query(SqlData);
},1000/30);

我想确保一次执行的sql.Query(SqlData)不超过一个。

您可以在回调中再次启动查询

query();

function query(){
    Data = sql.Query(SqlData, function(){
        query();
    });
}

因此,一次只运行一个查询是安全的

您可以在回调中再次启动查询

query();

function query(){
    Data = sql.Query(SqlData, function(){
        query();
    });
}

因此,一次只运行一个查询是安全的

在这种情况下,应该使用
setTimeout
而不是
setInterval
。您将在查询完成后立即创建超时。如果我嵌套了一个setTimeout wont,它会阻止设置间隔内的其他函数执行吗?@MoonEater916根本不会。“递归”调用setTimeout是常见的过程。答案取决于当有挂起的查询时应该发生什么。在查询完成之前是否应跳过或移动间隔?它是否应该因错误而退出?什么是
sql
?承诺控制流在这里很有用。在这种情况下,应该使用
setTimeout
而不是
setInterval
。您将在查询完成后立即创建超时。如果我嵌套了一个setTimeout wont,它会阻止设置间隔内的其他函数执行吗?@MoonEater916根本不会。“递归”调用setTimeout是常见的过程。答案取决于当有挂起的查询时应该发生什么。在查询完成之前是否应跳过或移动间隔?它是否应该因错误而退出?什么是
sql
?承诺控制流在这里是有益的。