如何在while循环中处理异步JavaScript代码



我试图使用$.getJSON()从API获取数据,但遇到了问题。每次通话的最大结果是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();

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

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);

最新更新