如何使用setTimeout和setInterval等待?

时间:2018-02-05 08:00:06

标签: javascript async-await

我有一个函数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);
    });
}

1 个答案:

答案 0 :(得分:1)

您可以尝试使用它,它应该可以正常使用

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一个