我希望变量的值在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,但我完全不知道我是如何做到这一点的。我对语法非常不熟悉;我非常喜欢新手。有没有人有任何指示?
谢谢!
答案 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