簡體   English   中英

如何使用setTimeout和setInterval等待?

[英]How to use await with setTimeout and setInterval?

我有一個函數createSession來獲取返回會話對象的用戶。 createSession要么返回用戶,要么拋出字符串異常。 我的代碼如下,如果session成功(這意味着我有用戶)繼續代碼。

但是我不知道用戶何時可用,因為其他資源也要求它。 因此,我希望修改我的代碼,它會嘗試讓用戶處於超時狀態,以免每1秒嘗試一次,直到達到超時30秒。

async function callTest() {
  const capabilities = {
    type: {
      chrome: 2
    }
  }

  var session = await working.createSession(capabilities)

  if(!session) return
  callTest()

  // remaining code goes here
}

我雖然在承諾中使用setTimout但問題是我不能在正常函數中使用await。 有人可以幫我修理我的代碼嗎?

var checkAuth = function(capabilities) {
    return new Promise(function(resolve) {

        var id = setInterval(function() {
           var session = await working.createSession(capabilities)

                if (session) {
                    clearInterval(id);
                    resolve(id);
                }
            });
        }, 10);
    });
}

您可以嘗試像這樣使用它,它應該工作得很好

var checkAuth = function(capabilities) {
    return new Promise(function(resolve) {
        setInterval(async function() {
           var session = await working.createSession(capabilities)
                if (session) {
                    clearInterval(id);
                    resolve(id);
                }
           }, 10);
    });
}

您應該在setInterval中將async關鍵字添加到函數定義中,因為await只能在async函數中使用。 更新:也將,10參數從Promise定義移動到setInterval一個

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM