【问题标题】:Transformation to another object returns undefined转换为另一个对象返回未定义
【发布时间】:2024-12-24 07:55:01
【问题描述】:

我正在使用 chrome 应用程序并尝试从用户选择的目录中包含的文件中读取。到目前为止效果很好,用户选择一个文件,然后将单个文件条目对象打印到我的控制台中:

代码:

         for (var i = 0; i < entries.length; ++i) {
            console.log("entry is " + entries[i]);
            a = entries[i].file(callback);    
          }

控制台:

       entry is [object FileEntry] window.js:18
       entry is [object FileEntry]
       ......

那么你如何从控制台看到entries[i] 是一个FileEntry 对象。 要从 FileEntry 读取,我首先必须将其转换为 File 对象。 在 FileEntry 的文档中:https://developer.mozilla.org/en-US/docs/Web/API/FileEntry#File 我读到有一个函数 void file( FileCallback successCallback, optional ErrorCallback errorCallback ); 返回一个文件对象。

您如何在上面的 代码 表单中看到我尝试用它来实现这一点:

    a = entries[i].file(callback); 
......

var callback = function(){
    console.log("it works");
    console.log(a); 
} 

我的问题console.log(a) 不返回 object File 而是未定义:

控制台:

entry is [object FileEntry]   window.js:18
entry is [object FileEntry]   window.js:18
it works                      window.js:29
undefined                     window.js:30
it works                      window.js:29
undefined 

我做错了什么?我如何测试它是否真的返回一个文件对象?谢谢!

完整代码

var callback = function(){
    console.log("it works");
    console.log(a); 
} 


chooseDirButton.addEventListener('click', function(e) {
  chrome.fileSystem.chooseEntry({type: 'openDirectory'}, function(theEntry) {

    chrome.fileSystem.getDisplayPath(theEntry, function(path) {

    var reader = theEntry.createReader();

        reader.readEntries(function(entries) {
          for (var i = 0; i < entries.length; ++i) {
            console.log("entry is " + entries[i]);
            a = entries[i].file(callback);    
          }
        });

    });
  });
});

【问题讨论】:

    标签: javascript google-chrome google-apps


    【解决方案1】:

    改变

    var 回调 = function(){

    收件人:

    var 回调 = function(a){

    【讨论】:

      【解决方案2】:

      我读到...“有一个功能

      **void** file(
        FileCallback successCallback, optional ErrorCallback errorCallback
      );
      

      返回一个文件对象。”

      如您所见,它不会返回它,而是作为参数传递给回调。他们只是措辞不好

      【讨论】: