- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我目前有一个使用 setInterval() 的工作计划回调方法,但是,我的代码的早期版本确实让我烦恼。如果有人能给我解释一下那就太好了。
这是我之前使用的完整实现,但不起作用:
function myCallBack(localPage) {
console.log('myCallBack ' + localPage);
}
var page = 1;
var timeout = 5000;
var timeoutInterval = 5000
console.log('timeout ' + timeout);
while (page < 10) {
setTimeout(function() { myCallBack(page) },timeout);
// Add 10 seconds for the next execution
timeout += timeoutInterval;
page++;
}
我的 JavaScript 有点生疏,所以如果某些看似显而易见的实现看起来很愚蠢,请耐心等待。另外,我不熟悉这个 setTimeout 函数,并且文档对我来说也不清楚。
我的问题是 localPage 始终为 10。它是否通过引用传递该值?当我在循环内输出“page”时,数字是正确的。我假设在整个循环执行后调用回调是否正确?异步行为对我来说很好。我只是希望每次执行都有一个较早的“page”值。
为了使脚本正常工作,我用 setInterval() 替换了整个循环。
Update: zhangjinzhou explains the issue. The callbacks, being non-blocking, is passed through the loop. By the time they all start executing, the last value of "page" is being read by them.
Bougarfaoui's code fixes the issue. Go for Denny's code if you're more of a stickler for syntax.
我想我对这件事的愚蠢是正确的。当我再次浏览文档时:
Schedules execution of a one-time callback after delay milliseconds. Returns a Timeout for use with clearTimeout().
表示超时后。所以我想可以肯定地说循环在超时完成之前已经完成了。哦!
最佳答案
这解决了问题:
var page = 1;
var timeout = 1000;
var timeoutInterval = 500
console.log('timeout ' + timeout);
while (page < 10) {
(function(page){
setTimeout(function() { myCallBack(page) },timeout);
})(page);
// Add 10 seconds for the next execution
timeout += timeoutInterval;
page++;
}
您遇到了关闭问题,setTimeout 是异步的,因此它将采用页面的最后一个值,即 10。
关于javascript - 回调方法的所有执行都为递增变量保留相同的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42658836/
我正在实现一个算法,当用户输入字符串时,字符串中的每个字符(如果是字母表)都应该增加给定的值(这里是旋转器)。我正在玩这个代码 2 小时,但无法弄清楚为什么当我按值旋转器递增时,它会按 rotator
我有 1.0.5。我怎样才能增加到 1.0.6? 试过了,但是不行。 echo 1.0.5 0.0.1 | awk '{sum=$1+$2; printf"%0.2f\n", sum }' 最佳答案
这个问题在这里已经有了答案: Behaviour of increment and decrement operators in Python (11 个回答) Why are there no ++
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎偏离主题,因为它缺乏足够的信息来诊断问题。 更详细地描述您的问题或 include a mini
我正在尝试温习我的 C,我有以下代码,当我使用 i 偏移量但不使用 Hold++ 时,它可以工作,我不明白为什么我认为他们做了同样的事情?这是我无法开始工作的版本: char* reversestri
我需要增加/减少 PostgreSQL 数据库中的计时。 下面是包含列类型为"timestamp without time zone" 的表的输出 如果时间超过 24 小时,我也需要更改日期。请协助
我有一个名为 temp_rfm 的表,其中 col1 实际上是客户 ID(我有一个非法的联盟混合问题)和 calc_date 是增加月份的开始。 SELECT * FROM temp_rfm ; co
我目前正在处理我的应用程序的首选项,我必须设置一个角度。默认值约为 30°,用户应该能够调整此角度以使其最适合。 我不只是制作一个普通的 EditTextPreference,而是希望它可以像在其他应
这个问题已经有答案了: Increment a number by prefix and postfix operator (1 个回答) 已关闭去年。 我正在努力理解 Javascript 增量运算
我使用下面的 javascript 递归地重新加载一个目标 DIV,其 id="outPut",将参数传递给 getData.php 时执行数据查询的结果>。问题是 fadeTo 会淡化每次迭代调用返
这个问题在这里已经有了答案: 关闭 10 年前。 Possible Duplicate: Jquery Draggable + Bring to Front 我有一个网站,用户可以在其中打开多个聊天
我必须定义一个函数,其中: Starting with a positive integer original, keep multiplying original by n and calculat
我正在我的应用程序中记录一些统计数据。其中一项统计数据是 BigDataStructure 的大小。我有两个选择: 创建一个计数器并递增/每次递减计数器有一个添加/删除大数据结构。 每次添加/删除从
在下面的 Java 示例程序中,我得到了无限循环,我不明白为什么: public class Time { public static int next(int v) { re
我从 C#/WPF 添加了一个意外的行为 private void ButtonUp_Click(object sender, RoutedEventArgs e) {
我想在 Python 2.7 中增加用户提供的字符串的最后一位数字。 我可以这样替换第一个数字: def increment_hostname(name): try: numb
我正在用蛮力搜索具有某些属性的 float (sin(a)^2+cos(a)^2-1 的小舍入误差)。因此,我想通过递增尾数来遍历给定 float 的邻域。 在 C 中是否有一种简单的方法可以做到这一
C 标准将 _Bool 定义为包含 0 或 1 的无符号类型。如果 _Bool 类型的值 1 递增,据我所知,有两个选项: 该值在 1 到 0 之间环绕 该值增加到 2,它是非零值,因此在转换回 _B
我有一个 INI 文件,其中存储了一些用于设置的整数。部分名称存储如下: [ColorScheme_2] name=Dark Purple Gradient BackgroundColor=224 B
我的应用程序中有这个方法: - (void)initializeTimer{ self.myTimer = [NSTimer scheduledTimerWithTimeInterval:th
我是一名优秀的程序员,十分优秀!