0

我试图从 API 中获取数据$.getJSON(),但遇到了问题。我可以获得的每次调用的最大结果是 50。但是nextPageToken由 api 提供以从另一个页面获取数据。在 while 循环(下面的代码)中,我想在nextPageToken为 null 时打破循环,但我如何从回调函数中做到这一点。我尝试设置一个标志,但我意识到这也行不通。

此外,我认为 while 循环不会按预期工作,因为 $.getJSON() 将异步运行nextPageToken并将保持不变null并且循环将中断。

总结: 1. 我想从每个页面获取数据。2.我想知道如何打破while循环。

let nextPageToken = null;
let flag = 0;
function getAll(){

    while(true){
        let pyl = {
            part: "snippet",
            key: key,
            nextPageToken: nextPageToken,
            maxResults: 50,
            playlistId: playlistId
        }

        $.getJSON(URL, pyl, pd=>{
            console.log(pd);
            arr.push(pd.nextPageToken);
            nextPageToken = pd.nextPageToken;

            // this is wrong
            if(nextPageToken == null) {
               flag = 1;
               break;  //This break statement is illegal
            } 
        });
        // This won't work too
        if(flag==0) break;
    }
}

getAll();
4

1 回答 1

0

您需要在收到响应后调用该函数。这是一个例子:

let flag = 0;

function getAll(nextPageToken) {

  let pyl = {
    part: "snippet",
    key: key,
    nextPageToken: nextPageToken,
    maxResults: 50,
    playlistId: playlistId
  }

  $.getJSON(URL, pyl, pd => {
    console.log(pd);
    arr.push(pd.nextPageToken);
    nextPageToken = pd.nextPageToken;

    // this is wrong
    if (nextPageToken == null) {
      flag = 1;
    } else {
      flag = 0;
      getAll(nextPageToken);
    }
  });
}

let startingToken; // Whatever this should be

getAll(startingToken);

于 2020-10-20T17:35:44.407 回答