函数返回空数组

时间:2015-07-02 10:58:40

标签: javascript arrays function return google-calendar-api

我有一个需要返回数组的javascript函数。在里面,我有另一个将值推送到数组的函数。然后它应该返回数组。

function getFreeBusy(calID, date) {
    var array = [];
    gapi.client.load('calendar', 'v3').then(function () {
        var request = gapi.client.calendar.freebusy.query({
            "timeMin": '' + date + 'T08:00:00-00:00',
            "timeMax": '' + date + 'T18:00:00-00:00',
            "timeZone": "Europe/Rome",
            "items": [
                {
                    "id": calID
                }
            ]
        });
        request.execute(function (data) {
            for (var c = 0; c < data.calendars[calID].busy.length; c++) {
                var timeStart = data.calendars[calID].busy[c].start.split('T')[1].split(':00+')[0];
                var timeEnd = data.calendars[calID].busy[c].end.split('T')[1].split(':00+')[0];
                array.push(timeStart, timeEnd);
            }
        });
    });
    return array;
};

但它只返回一个空数组。

var array = getFreeBusy(CALENDAR_ID, $("#data").val());
console.log(array);

1 个答案:

答案 0 :(得分:1)

request.execute asynchronous 功能。因此,您需要将callback函数用于函数中的return数据。

function getFreeBusy(calID, date, callback) {
//                                ^^^^^^^^^

    var array = [];
    gapi.client.load('calendar', 'v3').then(function() {
        ...
        ...
        request.execute(function(data) {
            for (var c = 0; c < data.calendars[calID].busy.length; c++) {
                var timeStart = data.calendars[calID].busy[c].start.split('T')[1].split(':00+')[0];
                var timeEnd = data.calendars[calID].busy[c].end.split('T')[1].split(':00+')[0];
                array.push(timeStart, timeEnd);
            }

            ////////////
            if (callback) {
                callback(array)
            }
            ////////////
        });
    });
};

var array = getFreeBusy(CALENDAR_ID, $("#data").val(), myCallback);
//                                                     ^^^^^^^^^^

function myCallback(array) {
    console.log(array);
}