gpt4 book ai didi

javascript - 上一篇文章完成后如何运行代码?

转载 作者:行者123 更新时间:2023-11-30 18:12:44 24 4
gpt4 key购买 nike

我有以下代码:

for (var i = 0; i < numFiles; i++) {
$.post('/Secure/File/PhysicalFileHandler.ashx?custId=whatever&idx=' + i, function (data) {
ids += data + '|';
if (i == numFiles-1) {
ids = ids.substring(0, ids.length - 1);
}
});

}

在上一篇文章完成后,我如何执行一段代码?我在上面尝试的方法不起作用(i 到达那里时已经是 ==numFiles)。有什么建议吗?

最佳答案

这是一个有点常见的问题——你引用的“i”是由 for 函数处理的,通常 for 函数在回调被触发时已经完成执行(在这种情况下,“i”等于到 numFiles 了)。有几个解决方案:一个是将回调更改为:

(function (i) {
return function (data) {
ids += data + '|';
if (i == numFiles-1) {
ids = ids.substring(0, ids.length - 1);
}
})(i)

这样做是为循环的每次执行创建一个新函数,并且每次该函数都有自己对“i”的引用 - 而不是回头查看 for 循环的 i 的定义/值,它有自己的要引用的局部参数。这必须通过返回另一个函数来完成,因为您需要在 for 循环的第一遍期间执行代码,确保在触发回调时保留正确的值。

另一种选择是将整个 post 语句包装在一个函数中,它有自己的 i 副本 - 我认为两者之间没有太大区别。就个人而言,我更喜欢上面代码片段中的方法,因为它最大限度地减少了代码整体流程的影响,但对此会有不同的看法。

关于javascript - 上一篇文章完成后如何运行代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14167627/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com