以下是创建数组的函数:
//retrieve calendar id's
function getCalendarId(){
gapi.client.load('calendar', 'v3', function() {
var request = gapi.client.calendar.calendarList.list();
request.execute(function(resp) {
var calendarID = [];
for (var i = 0; i < resp.items.length; i++) {
var ID = resp.items[i].id;
var calendarSummary = resp.items[i].summary;
var calendarLocation = resp.items[i].location;
var calendarDescription = resp.items[i].description;
if (calendarDescription && calendarDescription.indexOf("Resource Tracker") != -1) {
var index = calendarID.length;
calendarID[index] = ID;
}//endif
}//end for
console.log(typeof calendarID);
return calendarID;
});//end request.execute function(resp)
});//end client.load function
}//end getCalendarId
这是分配它的功能:
function submitEvents(numHorses){
var startdate = $("#from").val();
var enddate = $("#to").val();
var horsetypes = [];
var calid = [];
console.log(typeof(calid));
calid = getCalendarId();
console.log(typeof(calid));
for (i=0; i<numHorses;i++){
horsetypes[i] = $( "#type"+i).val();
addEvent(calid[i%calid.length], startdate, enddate, horsetypes[i]);
}//end for
};//end submitEvents
当我检查类型时,calendarID是返回之前的对象,当我声明它时,calid是一个对象,但是当我进行赋值时,calid = getCalendarID(); calid的类型变得不确定。
我现在已经把头撞到了墙上一段时间了;任何帮助表示赞赏!
答案 0 :(得分:2)
最外面的函数没有返回;它没有返回值,因此设置为函数返回值的变量设置为undefined。内部匿名函数包含return
,它可能或可能没有API的含义(可能不是)。
真正的问题是对日历API的调用可能需要花费任意时间(它是异步的),因此您无法在单个(同步)函数中设置该值并期望它能够正常工作。当你的请求进出远程服务器时,Javascript不会停止执行,你真的不希望它。
由于您可能正在使用getCalendarId
个其他地方,因此您可以考虑使用自己的功能,并在Google日历功能返回时调用它:
function getCalendarId(callback){ // !!!
gapi.client.load('calendar', 'v3', function() {
var request = gapi.client.calendar.calendarList.list();
request.execute(function(resp) {
var calendarID = [];
for (var i = 0; i < resp.items.length; i++) {
// omitted for brevity
}//end for
console.log(typeof calendarID);
callback(calendarID); // !!!
});//end request.execute function(resp)
});//end client.load function
}//end getCalendarId
function submitEvents(numHorses){
// omitted for brevity
getCalendarId(function(calid) { // !!!
console.log(typeof(calid));
for (i=0; i<numHorses;i++){
// omitted for brevity
}//end for
});
};//end submitEvents
答案 1 :(得分:-1)
//retrieve calendar id's
function getCalendarId(){
var calendarID = [];
gapi.client.load('calendar', 'v3', function() {
var request = gapi.client.calendar.calendarList.list();
request.execute(function(resp) {
for (var i = 0; i < resp.items.length; i++) {
var ID = resp.items[i].id;
var calendarSummary = resp.items[i].summary;
var calendarLocation = resp.items[i].location;
var calendarDescription = resp.items[i].description;
if (calendarDescription && calendarDescription.indexOf("Resource Tracker") != -1) {
var index = calendarID.length;
calendarID[index] = ID;
}//endif
}//end for
console.log(typeof calendarID);
});//end request.execute function(resp)
});//end client.load function
return calendarID;
}//end getCalendarId
这应该有效。应该为正在调用的外部函数声明CalenderID
。在您的代码中,您将calenderID
返回到另一个load