有没有一种方法可以将函数调用或语句延迟给定的毫秒数?

时间:2019-02-07 01:34:15

标签: javascript

我正在创建一个Chrome扩展程序,该程序在Udemy课程页面上会检查所有视频,因此证书将变为可用,但是我遇到了一个问题,即我需要激活所有必需按钮上的click事件,但这发生的速度如此之快,以至于我的控制台被net :: ERR_INSUFFICIENT_RESOURCES淹没了,所有按钮中只有一半被单击并将POST请求发送到Udemy服务器。现在我正在寻找sleep()函数,谷歌搜索告诉我javascript中没有一个。

这是我正在使用的代码。

function clickButtons() {
    var buttons = document.getElementsByClassName("curriculum-item--progress--3eKMJ btn btn-default")
    for (i = 0; i < buttons.length; i++) {
    clickButton(buttons, i)

}

}
function clickButton(buttonsArray, index){ 
    buttonsArray[index].click();
}

clickButtons();

如果还有另一种方法可以解决此问题,也将不胜感激。

2 个答案:

答案 0 :(得分:1)

您可以使用var a1 = "abc" let a2: String? = "d" let a3: String? = nil let a4: [Character]? = ["e","f"] a1 + a2 + a3 + a4 // "abcdef" a1 + a2 print("a1:", a1) a1 += a2 print("a1:", a1) a1 + a3 print("a1:", a1) a1 += a3 print("a1:", a1) a1 + a4 print("a1:", a1) a1 += a4 print("a1:", a1) a1.append(contentsOf: ["e","f","g"]) print("a1:", a1) a1.append(contentsOf: "hijkl") print("a1:", a1) aync创建延迟方法:

await

但是,话虽这么说,我认为最好是制定某种回调来触发另一个按钮单击,然后触发下一个等等。

答案 1 :(得分:0)

有一种解决方法/替代方法。在您的clickButtons()函数中,可以使用setTimeout()封装对clickButton的调用。像这样:

public interface YourOptions extends PipelineOptions {
 @Description("Your option")
 @Default.String("Hello World!")
 ValueProvider<String> getStringValue();

 void setStringValue(ValueProvider<String>  value);
}

public static void main(String[] args) {

 // Create pipeline
 YourOptions options = PipelineOptionsFactory.fromArgs(args).withValidation()
     .as(YourOptions.class);

 Pipeline p = Pipeline.create(options);

 // Branch for pushing the Value Provider value

 p.apply(Create.of(1)).apply(ParDo.of(new DoFn<Integer, Integer>() {

   @ProcessElement public void process(ProcessContext c) {

     YourOptions ops = c.getPipelineOptions().as(YourOptions.class);
     // Do something like push to DB here....
     LOG.info("Option StringValue was {}" , ops.getStringValue());

   }
 }));

 // The main pipeline....
 p.apply(Create.of(1,2,3,4)).apply(Sum.integersGlobally());

 p.run();
}

这将使您的循环中的每个呼叫延迟您设置的超时时间。

也在此处引用JavaScript sleep/wait before continuing