首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Javascript: setTimeout: clearTimeout

Javascript: setTimeout: clearTimeout
EN

Stack Overflow用户
提问于 2021-10-10 00:46:03
回答 1查看 69关注 0票数 0

我编写了一个通用的waitFor函数,它将接受回调和等待时间,并等待它。根据我的理解和观察,我的代码会一直等待,然后报告状态。我希望在达到解决方案后清除超时。我该怎么做?

代码语言:javascript
复制
    var _timer;
    function waitForGeneric(method, max) {
    var start = Date.now();
    return new Promise((resolve, reject) => {
        method();
        function check() {
            result = _connected;
            if (result) {
                console.log('connected to server[connection status]: ' + result);
                window.clearTimeout(_timer);
                resolve();
            }            
            else {
                if (Date.now() - start > max) {
                    console.log('waited for 30 seconds for connection[connection status]: ' + result);
                    reject();
                }
                else {
                    timer = window.setTimeout(check, 1000);
                }
            }
        }

        check();

    });
}

这是正确的吗?

EN

回答 1

Stack Overflow用户

发布于 2021-10-10 04:53:25

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise/then

我要到明天才能对此做出进一步的回应,我也不一定有工具来测试你正在尝试做什么,以确保这就是你要做的……但是,如果您希望在promise解析后运行函数,则可以将.then()方法附加到promise实例。此外,对于您的特定情况,我可能是错误的,但我通常不会看到window.clearTimeoutwindow.setTimeout,而是它们只有各自的函数调用,如clearTimeoutsetTimeout

代码语言:javascript
复制
var _timer;
function waitForGeneric(method, max)
{
  var start = Date.now();
  return new Promise((resolve, reject) => {
    method();
    function check() {
        result = _connected;
        if (result) {
            console.log('connected to server[connection status]: ' + result);
            clearTimeout(_timer);
            resolve();
        }            
        else {
            if (Date.now() - start > max) {
                console.log('waited for 30 seconds for connection[connection status]: ' + result);
                reject();
            }
            else {
                timer = setTimeout(check, 1000);
            }
        }
    }

    check();

  }).then(function() {
    clearTimeout(_timer);
  });
}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69511499

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档