【问题标题】:How do I go back to the beginning of the function in asynchronous structure?如何回到异步结构中函数的开头?
【发布时间】:2021-09-17 20:32:13
【问题描述】:

我不知道问题是否是异步的,但我的代码在这里不起作用 如果 dat().then 中的 if 函数为假,我如何让它在 else 端每秒重新检查一次?目前我在 settimeout 中的 dat() 函数不起作用。我没想到它会起作用

var dat = async () => {
        await document.querySelector("body").click();
}

dat().then(() => {
    if(document.querySelector("body").className.indexOf("position") == -1){
       console.log("right");
    }
    else setTimeout(arguments.callee, 1000);

})
dat();

【问题讨论】:

  • else return promisifiedSetTimeout(dat, 1000)。但是,document.querySelector("body").click() 不返回承诺,因此,将其设为异步函数并以这种方式循环它比简单地每 n 秒调用一次函数直到条件为真所必需的要复杂得多。这实际上是你想要做的吗?还是为了更有用的东西而简化了
  • 我上传了这个过程,把它简化了很多。你给的代码 Uncaught (in promise) ReferenceError: promisifiedSetTimeout is not defined 它返回一个类似的错误
  • 对,这是一个你需要创建的虚构函数,对不起
  • setTimeout(arguments.callee, 1000); 应该实现什么?请注意,箭头函数没有自己的arguments,并且callee 已被弃用。

标签: javascript asynchronous async-await promise callback


【解决方案1】:

这是我尝试编写您的代码并循环指定的所需循环。

var dat = async () => {
    await document.querySelector("body").click();
}

const unclicked = () => (
    document.querySelector("body").className.indexOf("position") == -1);

do {
    await dat();
    if (unclicked())
        console.log("right");
    else
        setTimeout(arguments.callee, 1000);
} while (true) 

但是,我承认我同意 Kevin B 的评论,即 setTimeout 和 `document.querySelector(...).click() 不会返回 Promises。

如果您愿意发表评论,我很乐意更新答案以反映问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-05
    • 2020-03-15
    • 2021-12-28
    相关资源
    最近更新 更多