相关疑难解决方法(0)

async函数+ await + setTimeout的组合

我正在尝试使用新的异步功能,我希望解决我的问题将来会帮助其他人.这是我正在运行的代码:

  async function asyncGenerator() {
    // other code
    while (goOn) {
      // other code
      var fileList = await listFiles(nextPageToken);
      var parents = await requestParents(fileList);
      // other code
    }
    // other code
  }

  function listFiles(token) {
    return gapi.client.drive.files.list({
      'maxResults': sizeResults,
      'pageToken': token,
      'q': query
    });
  }
Run Code Online (Sandbox Code Playgroud)

问题是,我的while循环运行得太快,并且脚本每秒向google API发送太多请求.因此,我想建立一个延迟请求的睡眠功能.因此我也可以使用此函数来延迟其他请求.如果有其他方式延迟请求,请告诉我.

无论如何,这是我的新代码不起作用.请求的响应返回到setTimeout中的匿名异步函数,但我只是不知道如何将响应返回给sleep函数resp.到最初的asyncGenerator函数.

  async function asyncGenerator() {
    // other code
    while (goOn) {
      // other code
      var fileList = await sleep(listFiles, nextPageToken);
      var parents = await requestParents(fileList);
      // other code
    }
    // other code
  } …
Run Code Online (Sandbox Code Playgroud)

javascript settimeout async-await ecmascript-2017

219
推荐指数
10
解决办法
17万
查看次数

在promise链上使用setTimeout

在这里,我试图围绕promises.Here在第一次请求我获取一组链接.并在下一个请求我获取第一个链接的内容.但我想在返回下一个promise对象之前做一个延迟.所以我使用它上面有setTimeout.但是它给了我以下JSON错误(without setTimeout() it works just fine)

SyntaxError:JSON.parse:JSON数据的第1行第1列的意外字符

我想知道为什么会失败?

let globalObj={};
function getLinks(url){
    return new Promise(function(resolve,reject){

       let http = new XMLHttpRequest();
       http.onreadystatechange = function(){
            if(http.readyState == 4){
              if(http.status == 200){
                resolve(http.response);
              }else{
                reject(new Error());
              }
            }           
       }
       http.open("GET",url,true);
       http.send();
    });
}

getLinks('links.txt').then(function(links){
    let all_links = (JSON.parse(links));
    globalObj=all_links;

    return getLinks(globalObj["one"]+".txt");

}).then(function(topic){


    writeToBody(topic);
    setTimeout(function(){
         return getLinks(globalObj["two"]+".txt"); // without setTimeout it works fine 
         },1000);
});
Run Code Online (Sandbox Code Playgroud)

javascript json promise

97
推荐指数
5
解决办法
10万
查看次数

如何在visual studio代码中调试async/await?

我想在visual studio代码中调试包含async/await的js文件,但它提醒我vscode不支持它.我该怎么做才能使vscode支持async/await?

javascript async-await visual-studio-code

12
推荐指数
2
解决办法
6826
查看次数

如何从 VSCode 调试器调用异步函数?

如果我在一些 javascript 代码中放入 VSCode 调试器并使用 wait 调用异步函数,它只会返回一个承诺。如何解决调试器中的承诺,以便我可以看到结果是什么?

例如,如果我定义一个像这样的函数:

const doAsyncThing = async () => {
    return new Promise((resolve) => {
        setTimeout(() => {
            resolve(5)
        }, 1000)
    })
}

(async function() {
    const result = await doAsyncThing()
    console.log(`result is ${result}`)
    debugger
})()
Run Code Online (Sandbox Code Playgroud)

然后当我在调试器中调用它时会发生这种情况:

result is 5
> result
5
> await doAsyncThing()
Promise {<pending>}
> const result2 = await doAsyncThing()
Promise {<pending>}
> result2
Uncaught ReferenceError: result2 is not defined
> doAsyncThing().then(r => console.log(r))
Promise {<pending>}
> await doAsyncThing().then(r => console.log(r)) …
Run Code Online (Sandbox Code Playgroud)

javascript node.js async-await visual-studio-code

10
推荐指数
1
解决办法
1007
查看次数