【发布时间】:2018-06-11 20:40:29
【问题描述】:
我在从 youtube 播放列表中检索所有数据时遇到了一些困难。这是我的代码:
function getApiUrl(nextPageToken) {
return '<api_url>' + '&playlistId=' + '<playlistId>' + (nextPageToken !== null ? '&pageToken=' + nextPageToken : '');
}
function getPlaylist() {
var titles = [],
nextPageToken = null,
url = getApiUrl(null);
while(true) {
// returns new Promise(...)
doRequest(url).then(data => {
// process data : push items to titles array
nextPageToken = data.nextPageToken;
});
if (nextPageToken === undefined) {
break;
}
url = getApiUrl(nextPageToken);
}
// returns empty array
return titles;
}
试图打破数据处理程序内部的循环导致SyntaxError: Illegal break statement
【问题讨论】:
-
使用与生成器函数无关的无限循环通常不是一个好主意。你应该在这里做的是将一个变量设置为true,当
nextPageToken === undefined时,将变量设置为false。这将停止循环 -
@SterlingArcher 仍然没有解决空数组的问题
-
@SterlingArcher 不会因为对 nextPageToken 的分配是异步的而不起作用吗?
-
您必须将所有代码汇总到
then才能正常工作。忙于等待承诺可能弊大于利。
标签: javascript asynchronous promise youtube-api