JavaScript变量定期在两个值之间变化

时间:2017-11-16 22:42:19

标签: javascript variables timeout intervals

我希望变量的值在0和1之间有规律地变化。如果我有一个值为0(doTheThing() { let options = { quality: 50, destinationType: Camera.DestinationType.DATA_URL, sourceType: Camera.PictureSourceType.PHOTOLIBRARY, encodingType: Camera.EncodingType.JPG }; navigator.camera.getPicture(imgData => { this.uploadToS3(imgData); }, options); uploadToS3(data) { let AWS = require('aws-sdk'); AWS.config = new AWS.Config(); AWS.config.accessKeyId = 'noway'; AWS.config.secretAccessKey = 'jose'; AWS.config.region = 'us-east-2'; let s3 = new AWS.S3(); let uploadParams = { Bucket: 'iamkule/f1/f2', Key: '', Body: new Buffer(data, 'base64') }; uploadParams.Key = 'myfile.jpg'; s3.upload(uploadParams, function (err, data) { if (data) { console.log('yay!'); } }); } } )的变量,我怎么能将它增加1(counter = 0)几秒钟后,再过几秒后将其减少回0(counter = 1)?无限循环基本上就是我想要的。

我假设这需要setTimeout或setInterval,但我完全不知道我是如何做到这一点的。我对语法非常不熟悉;我非常喜欢新手。有没有人有任何指示?

谢谢!

5 个答案:

答案 0 :(得分:1)

你可以通过一个通过setTimeout调用自身的函数来创建一个无限的定时循环。见下文。



var count = 0;
function flip() {
  count = Number(!count);
  console.log(count);
  setTimeout(flip, 1000);
}

flip();




答案 1 :(得分:1)

更通用的方法:

// possible addition: allow user to stop the timer
const rotate = (time, vals) => {
  // TODO: handle incorrect vals (non-empty array) or time (positive number)
  let idx = 0;
  setInterval(() => idx = (idx + 1) % vals.length, time);
  return {
    get val() {return vals[idx];}
  }
}

const toggle = rotate(1000, [0, 1])

toggle.val //=> depends on when you call it, changes every 1000 ms
           //   but always either 0 or 1.

这样做的一个优点是它不会将值保留在全局范围内,而其他人可能会将其弄乱,但将其封装在闭包中。

它更通用,因为您可以轻松更改更新之间的时间,您可以选择任何您想要的值(例如,rotate(5000, ['foo', 'bar', 'baz')。)

答案 2 :(得分:0)

var counter = 0;
var changeCounter = function () {
  counter = counter === 0 ? 1 : 0;
  console.log('counter', counter);
  setTimeout(changeCounter, 1000);
}
changeCounter();

答案 3 :(得分:0)

这听起来像是作业,但试试这个:

var value = 0;

setInterval(
  function() {
    value = value===0 ? 1 : 0;
    console.log('value =', value);
  },
  1000
);

setInterval会一遍又一遍地调用该函数,而无需反复调用setTimeout

答案 4 :(得分:0)

setInterval是您想要的,如W3C中所述,您应该传递函数和时间间隔(以毫秒为单位)来执行代码的频率。

var counter = 0;

setInterval(function(){ 

  counter = 1 - counter;

  //Do what you want with the result...
  //alert(counter);  

}, 1000);

https://codepen.io/paulodiogo/pen/xPPOKa?editors=1010

不使用全局变量...... https://codepen.io/paulodiogo/pen/KyyMXZ