如何仅在完成对gap.client.youtube的请求.execute后执行函数
How to execute a function only after a request.execute to gapi.client.youtube has completed?
我正试图从youtube播放列表的多个页面中获取结果。问题是,只有在收到第一个请求的数据后,我才能执行第二个请求(针对第二个页面)。我试过承诺、延期、回电,但似乎都不起作用。
function requestVideoPlaylist(playlistId, pageToken, pages) {
$('#video-container').html('');
var requestOptions = {
playlistId: playlistId,
part: 'snippet',
maxResults: 10
};
if (typeof(pages)==='undefined') {
pages = 2;
}
var i = 0
while (i++ < pages){
var request = gapi.client.youtube.playlistItems.list(requestOptions);
request.execute(function(response) {
nextPageToken = response.result.nextPageToken;
var playlistItems = response.result.items;
console.log(playlistItems)
if (playlistItems) {
$.each(playlistItems, function(index, item) {
displayResult(item.snippet);
});
} else {
$('#video-container').html('Sorry you have no uploaded videos');
}
}).done(console.log('test'));
if (nextPageToken) {
console.log(nextPageToken)
requestOptions.pageToken = nextPageToken;
}
}
}
在本例中,我收到一条消息'Uncaught TypeError:无法读取.done(console.log('test))的未定义'属性'done',并且没有从console.log(nextPageToken)中读取任何内容,因为该部分也在收到响应之前执行。
显然request.execute()
不返回任何内容(undefined
),更不用说Promise了,所以将函数调用直接插入回调,如下所示:
request.execute(function(response) {
nextPageToken = response.result.nextPageToken;
var playlistItems = response.result.items;
console.log(playlistItems);
if (playlistItems) {
$.each(playlistItems, function(index, item) {
displayResult(item.snippet);
});
loadNextPage(nextPageToken); // <--
} else {
$('#video-container').html('Sorry, you have no uploaded videos');
}
});
顺便说一句,你不能做.done(console.log(...))
,因为这相当于:
var foo = console.log(...);
getAPromise().done(foo);
foo
是console.log()
返回的值,在本例中是undefined
,所以您调用.done(undefined)
,这显然不会达到您的目的。相反,你需要做一些像guest271314建议的事情:
getAPromise().done(function(arg) {
console.log(arg);
});
(除了之外,我建议你去读一本JS书,以加强你对这类典型模式的理解。)
相关文章:
- ajax请求的顺序总是不同的
- Meteor如何接收HTTP请求
- 有没有一种方法可以防止img get请求使用css或js发生
- 从ajax请求中获取javascript对象
- JSONP请求返回结果,但也触发error_callback
- 在localhost Dev Box上测试JSONP请求的最佳方式
- Ajax请求文档就绪会导致jquery加载缓慢
- MockJax没有在JavaScript应用程序中发送对我AJAX请求的响应
- 正在传递JSONP标头's数据参数到另一个文件中的AJAX请求
- 在openshift node js应用程序中获取请求
- 反应路由器弄乱了请求网址
- 在我的情况下,如何进行http请求
- 使用密码对话框Javascript请求帮助
- servlet中的请求对象,而不是从jsp接收参数值
- 否'访问控制允许来源'标头存在于IISNOde中请求的资源(AngularJS+NodeJs)上
- JavaScript代码未正确检查ajax请求
- node.js请求数据事件未在CORS ajax调用中触发
- 如何检测第三方广告服务器请求
- 在Rails中更新Div,而不更改更新请求后的视图
- 如何仅在完成对gap.client.youtube的请求.execute后执行函数