在Javascript中为采样数据创建时间戳对象数组?
目标是以周期性的间隔将采样数据作为对象推送到阵列上,并等待新阵列完成后将其注销到控制台 我是JS新手,所以请放轻松;)。我可能会让事情变得比实际需要的更复杂。我想这就像for循环中的在Javascript中为采样数据创建时间戳对象数组?,javascript,arrays,asynchronous,timestamp,Javascript,Arrays,Asynchronous,Timestamp,目标是以周期性的间隔将采样数据作为对象推送到阵列上,并等待新阵列完成后将其注销到控制台 我是JS新手,所以请放轻松;)。我可能会让事情变得比实际需要的更复杂。我想这就像for循环中的setTimeout()一样简单 我已经能够以两种不同的方式生成数组,使用iLife和下面的setTimeout()以及setInterval()。不确定如何使async Wait函数使用数组push()方法查询长度。也许这不是一个好方法 类样本{ 构造函数(标记、时间戳){ this.tag=tag; this.
setTimeout()
一样简单
我已经能够以两种不同的方式生成数组,使用iLife和下面的setTimeout()
以及setInterval()
。不确定如何使async Wait函数使用数组push()
方法查询长度。也许这不是一个好方法
类样本{
构造函数(标记、时间戳){
this.tag=tag;
this.timeStamp=Date.now();
}
}
函数阵列生成器(标签){
返回样品推送(新样品(标签));
};
函数setIntSample(回调、延迟、迭代){
var i=0;
var intervalID=setInterval(函数(){
收回(i);
如果(++i==迭代次数){
clearInterval(intervalID);
}
},延误);
};
在arrayGenerator()
函数中生成数组时,上面的命令似乎可以运行console.log()
。下面没有骰子
函数resolveAfterArrGeneration(){
返回新承诺(解决=>{
arrLength=setIntSample(i=>{arrayGenerator(i)},3000,5)
如果(arrLength==5){resolve();}
});
}
异步函数ans(){
var answer=等待resolveAfterArrGeneration();
控制台日志(sampleArr);
}
ans();
基本思想是在setInterval
运行了足够多的迭代后返回承诺并解决承诺。您可以在一个单独的函数中使用类似的东西(使用额外的console.logs
来显示流程):
类示例{
构造函数(标记、时间戳){
this.tag=tag;
this.timeStamp=Date.now();
}
}
函数makeSamples(迭代、延迟){
设样本=[],i=0;
返回新承诺(解决=>{
让intervalID=setInterval(函数(){
console.log(“推送新样本”)
推送(新样本('tag:'+i));
如果(++i==迭代次数){
console.log(“已完成解析”)
clearInterval(intervalID);
解析(样本)
}
},延误);
})
}
然后(console.log)
我将隔离延迟部分(异步)部分,并为此创建一个单独的通用函数delay()。然后,使用async
函数和for
循环,剩下的一切都变得简单了:
constdelay=(ms)=>newpromise(resolve=>setTimeout(resolve,ms));
类样本{
构造函数(标记、时间戳){
this.tag=tag;
this.timeStamp=Date.now();
}
}
异步函数setIntSample(回调、ms、迭代){
常数arr=[];
for(设i=0;i新样本(标记)
console.log(“等待它…”);
setIntSample(newSample,1000,5)。然后(console.log)代码>另一种方法,我刚刚开始使用生成器函数
function* simpleGenerator(){
var index = 0;
while (true)
yield {tag: index++, time: Date.now()}
}
var gen = simpleGenerator();
…用相应的推力
arr.push(gen.next().value);
非常感谢。看起来这将使以不同采样频率并行运行多个进程变得简单。