【问题标题】:How to loop through an array one string at a time?如何一次遍历一个字符串?
【发布时间】:2018-12-14 01:14:06
【问题描述】:

好的,所以我有一个包含 10,000 多个字符串的 HUGE 数组,我希望一次循环遍历一个字符串,就像我想等到函数完成后再转到数组中的下一个字符串一样。

现在循环通过我的函数尽可能快地放置字符串,这是我无法拥有的,因为这些字符串被插入到$.get 请求中......而且它一次发出太多请求......

这是我目前的代码:

var sp = ["48343", "48383", "48934893", "438943", "47849345", "45843945", "47483923", "38445"];
for (var i = 0; i < sp.length; i += 1) {
    check(sp[i]);
}

如果我解释得不够好,请原谅我,而不是投反对票,请问我要解释什么,谢谢:D

【问题讨论】:

  • 取决于您想一次发出多少请求。您必须实现节流算法。 (但是,10,000 多个请求,即使受到限制,听起来也不是一个好的设计策略)
  • 或者只是简单的sleep function..
  • 连续发出 10,000 个请求似乎也不是一个好主意。您是否在控制将请求发送到的服务器?如果是,请将其更改为接受多个 ID。
  • 为什么不能发布数组并编写一些服务器代码来处理该数组?
  • 如果您担心的话,您不必一次发送所有数据,但您至少应该让服务器能够一次处理多个值。

标签: javascript arrays loops for-loop


【解决方案1】:

据我所知,您可能只想使用setInterval 来分隔您的请求。

例子:

var sp = ["...", "..."];
var i = 0;
var interval = setInterval(function() {
  if (i >= sp.length) {
    clearInterval(interval);
  } else {
    check(sp[i++]);
  }
}, 5);

【讨论】:

    【解决方案2】:

    您需要在一个请求中将整个阵列发送到服务器,并在服务器上对整个阵列进行检查。然后来自请求的响应是通过检查的数组。您当前的设计很糟糕,请不要进行数千个 get 请求。

    【讨论】:

      【解决方案3】:

      默认情况下,$.get() 是异步的。

      查看以下链接

      所以如果你让你的调用同步更好(但问题是它自 jQuery 1.8 以来已被弃用)只需引入一个值为 false 的新属性 async 到传递给调用的对象。

      但如果你使用 jQuery 版本 >= 1.8,最好不要使用它。

      如果没有,您可以查看以下链接:

      注意 » 这样,for循环中的调用语句将等待请求完成,即一旦函数返回,下一次迭代将继续。

      最后,我认为将 Web workersasync ajax get request 结合使用将是您的应用程序的更好选择。

      检查https://developer.mozilla.org/en-US/docs/Web/API/Web_Workers_API/Using_web_workers

      【讨论】:

      • async: false 在标准 Javascript 和 jQuery 中已被弃用,而且通常是一个坏主意。请不要推荐它——对于 JS 学习者来说更好地使用 异步,它是语言的很大一部分。
      猜你喜欢
      • 2021-06-30
      • 2014-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多