代码之家  ›  专栏  ›  技术社区  ›  Hello Universe

如何在JS中调用async await,以便在一定时间后再次获取?

  •  1
  • Hello Universe  · 技术社区  · 8 年前

    我有一个 异步awai t如下所示,我只是获取一些JSON数据。它正在抓取ok。但是,如果查看控制台,您会注意到JSON数据中有一个值finish,它基本上是Unix时间戳。

    当用户的当前时间戳大于Unix时间戳时,我需要再次获取JSON数据。然后,我需要再次检查时间戳,并无限次地继续这样做。 只要当前时间超过完成时间戳,json数据就会更改。

    我该怎么做?

    这是一个关于此的示例代码笔 https://codepen.io/hellouniverse/pen/XVEBXY?editors=1012

    class aClass {
     async getData() {
        try {
            let response = await fetch(
                "https://d2nzqyyfd6k6c7.cloudfront.net/nova-player-history/nova969-current.json"
            );
            let json = await response.json();
            return json;
        } catch (e) {
            console.log("Error!", e);
        }
     }
    }
    
    $(document).ready(function() {
        const myClass = new aClass();
          var promise = myClass.getData()
                .then(function(data){
                    console.log(data);
                });   
    });
    
    1 回复  |  直到 8 年前
        1
  •  2
  •   Peter    8 年前

    这个密码就是照你说的做,我走了 /* Put Your DOM update code here*/ 在这里可以放置dom操作代码。

    function sleep(ms) {
      return new Promise(resolve => setTimeout(resolve, ms));
    }
    
    // This looks weird because jQuery does not like async code in document ready.
    $(() => { (async () => {
        let getData = async () => {
            console.log('getData');
            let response = await fetch(
                "https://d2nzqyyfd6k6c7.cloudfront.net/nova-player-history/nova969-current.json"
            )
            let json = await response.json()
            let tDiff = json.finish - Math.round((new Date()).getTime() / 1000);
            console.log(json)
            console.log(`Refresh in ${tDiff}s`)
            /* Put Your DOM update code here*/
    
            await sleep(tDiff * 1000)
        }
    
        // Run It forever
        for (;;) await getData()
    
    })()});