Ошибка типа: обратный вызов не является функцией при загрузке файла с Google Диска

#javascript #google-drive-api

#javascript #google-drive-api

Вопрос:

Я использую код из этого примера

https://gist.github.com/Daniel15/5994054

Средство выбора возвращает файл, и когда я пытаюсь загрузить его с помощью этой функции

 function downloadFile(file, callback) {
  if (file.downloadUrl) {
    var accessToken = gapi.auth.getToken().access_token;
    var xhr = new XMLHttpRequest();
    xhr.open('GET', file.downloadUrl);
    xhr.setRequestHeader('Authorization', 'Bearer '   accessToken);
    xhr.onload = function() {
      callback(xhr.responseText);
    };
    xhr.onerror = function() {
      callback(null);
    };
    xhr.send();
  } else {
    callback(null);
  }
}
  

Он выдает эту ошибку

Ошибка типа: обратный вызов не является обратным вызовом функции (null) filepicker.js (строка 130)

Комментарии:

1. как вы вызываете DownloadFile, передаете ли вы ему функцию? т.е. DownloadFile(«file»,function(){ // функция обратного вызова });

2. onSelect: функция (файл) { console.log(файл); DownloadFile(файл); оповещение (‘Selected’ file.title); }

Ответ №1:

Итак, из вашего примера вызова

     function initPicker() {
     var picker = new FilePicker({
         apiKey: 'AIzaSyB8a8yohsAyEz1eZEFgt2YE-tMgACYWnVs',
         clientId: 458068379722,
         buttonEl: document.getElementById('pick'),
         onSelect: function(file) {
             console.log(file);
             downloadFile(file);
             alert('Selected '   file.title);
         }
     });
 }
  

вы не передаете функцию обратного вызова, либо обработайте это, проверив, что обратный вызов является функцией в методе DownloadFile, прежде чем он попытается ее запустить…..

  function downloadFile(file, callback) {
     if (file.downloadUrl) {
         var accessToken = gapi.auth.getToken().access_token;
         var xhr = new XMLHttpRequest();
         xhr.open('GET', file.downloadUrl);
         xhr.setRequestHeader('Authorization', 'Bearer '   accessToken);
         xhr.onload = function() {
             if (typeof callback == "function") {
                 callback(xhr.responseText);
             }
         };
         xhr.onerror = function() {
             if (typeof callback == "function") {
                 callback(null);
             }
         };
         xhr.send();
     } else {
         if (typeof callback == "function") {
                 callback(null);
             }
     }
 }
  

или предоставьте функцию обратного вызова.

   function initPicker() {
         var picker = new FilePicker({
             apiKey: 'AIzaSyB8a8yohsAyEz1eZEFgt2YE-tMgACYWnVs',
             clientId: 458068379722,
             buttonEl: document.getElementById('pick'),
             onSelect: function(file) {
                 console.log(file);
                 downloadFile(file, function(){
                        //do something when the file is donwloaded
                 });
                 alert('Selected '   file.title);
             }
         });
     }
  

Комментарии:

1. я добавил функцию обратного вызова в свой downloadfile с предупреждением, и с этим я избавился от ошибки, но, похоже, она больше ничего не делает, я имею в виду, что выбранный мной файл не загружается