您的代码存在一些问题。首先,你分享给很多国家。例如 crossSection 应该在匿名的 Interval 函数中单独定义。为什么将“crossSection”定义为闭包?如果 someOtherFunction 运行很长时间,您可能确实会遇到某种竞争条件。
var source = [];
stream.on('data', function(data) {
source.push(data);
});
setInterval(function() {
var target = source;
source = [];
someOtherFunction(target, function(data) {
console.log(data);
}
}, 30000);
如果您可以访问someOtherFunction那么我会像这样重写整个内容
var source = [];
stream.on('data', function(data) {
source.push(data);
});
setInterval(function() {
var processing = true;
while (processing) {
var elem = source.shift();
someOtherFunction(elem, function(data) {
console.log(data);
});
processing = checkForBreakConditionAndReturnFalseIfBreak();
}
}, 30000);
如果元素的数量很大并且someOtherFunctions需要很长时间,您仍然可能会遇到一些问题。所以我可能会做这样的事情
var source = [];
var timerId = 0;
stream.on('data', function(data) {
source.push(data);
});
function processSource() {
clearTimeout(timerId);
var processing = true;
while (processing) {
var elem = source.shift();
someOtherFunction(elem, function(data) {
console.log(data);
});
processing = checkForBreakConditionAndReturnFalseIfBreak();
}
setTimeout(processSource, calcTimeoutForNextProcessingDependentOnPastData());
};
setTimeout(processSource, 30000); //initial Timeout