提问人:Syd Hartha 提问时间:12/4/2020 最后编辑:FerdinandoSyd Hartha 更新时间:12/5/2020 访问量:46
我的超时闭包仍然只处理循环的最后一个值。Java脚本
My timeout closure still processes only the last value of the loop. Javascript
问:
我有一个循环,它使用一个对象调用executepostaction。问题是 executepostaction 只执行循环的最后一个值。我已经尝试了很多闭包,在这里我尝试使用 setTimeout 进行修复,但仍然没有运气。似乎有什么问题?
我的超时函数:
function MakeTimeout(fn, data, timeout) {
setTimeout(function () { fn.call(null, data); }, timeout);
}
这是来自事件函数的循环:
for (var ctr = 0; ctr < Selectrows.length; ctr++) {
var action= selectedAction;
action["trackId"] = Selectrows[ctr].innerText.replace(/(^\d+)(.+$)/i, '$1');
MakeTimeout(function (passaction) {
researchService.postExecuteAction(passaction)
.then(function (result) {
}, function error(result) {
$scope.error = result;
});
}, action, ctr * 1000);
}
请帮忙。谢谢
答:
0赞
Unmitigated
12/4/2020
#1
在修改对象之前,可以使用扩展语法创建对象的副本。
var action = {...selectedAction};
1赞
Rodrigo
12/4/2020
#2
我在那里看到了一些问题,不确定您到底要做什么,但似乎您想为数组的每个值调用一个承诺。
猜测您能够使用 ES6 并且每个调用都是异步的,我会做这样的事情:
Selectrows.forEach(row => {
const action = {
...selectedAction,
trackId: row.innerText.replace(/(^\d+)(.+$)/i, '$1')
};
researchService.postExecuteAction(action)
.then(function (result) {
// Do something
}, function error(result) {
$scope.error = result;
});
});
- 首先是 using 而不是 for if 是一个数组。
forEach
Selectrows
- 克隆对象 bc 如果您只是分配它,则每次都使用相同的对象,bc are .
selectedAction
objects and arrays
reference types
- 看来你不需要超时,或者是吗?每个 promise 将并行执行,并在 promise 返回响应后立即响应。
评论