javascript - 如何在while循环中处理异步JavaScript代码?
问题描述
我试图从 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();
解决方案
您需要在收到响应后调用该函数。这是一个例子:
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);
推荐阅读
- python - 如何在 Python 中使用全局超时分叉和加入多个子进程?
- python - Python max() 函数忽略列表中第一项的最大值
- reactjs - 如何避免我的 PostgreSQL 日期时间中的“Z”
- android - 获取在 android 设备中配置的帐户数量
- r - R Shiny stop 用于用户输入并显示所有图
- javascript - 运行两台服务器时NodeJS服务器错误
- neo4j - Neo4Js 客户端错误 apoc.load.csv 过程失败。由 ArrayIndexOutofBoundException 1 引起
- r - 没有假定更改时的更改点检测
- android - smoothScrollToPosition 在 recyclerView 中不起作用
- c - _fsopen() 究竟是如何工作的?