【问题标题】:JavaScript push returns an empty array [duplicate]JavaScript推送返回一个空数组[重复]
【发布时间】:2017-08-23 12:59:00
【问题描述】:

我知道这件事已经受到质疑,但实际上,我没有发现任何有用或可以理解的东西。

我有这个代码:

var pdfListPath = [];

function listDir(path) {
  window.resolveLocalFileSystemURL(path,
    function(fileSystem) {
      var reader = fileSystem.createReader();
      reader.readEntries(
        function(entries) {
          console.log(entries);
          for (var i = 0; i == entries.length; i++) {
            pdfListPath.push(entries[i]);
          };
        },
        function(err) {
          console.log(err)
        }
      );
    },
    function(err) {
      console.log(err);
    }
  );
};

var pdfList = listDir(cordova.file.applicationDirectory + "www/pdf/");
console.log(pdfList);
console.log(pdfListPath);

我所期望的是pdfListPath 充满了一些东西,但我在控制台中得到的是“未定义”。

entries 是一个填充数组,这有什么问题?

提前谢谢你。

【问题讨论】:

  • 你的代码是异步的,你需要在处理函数内的for循环之后移动console.log(pdfListPath);
  • TL;DR, console.log(pdfList) 发生在内部函数被异步调用之前。实际值仅在那些内部函数中可用(或使用 Promises 和/或 async 函数)
  • function listDir(path, successHandler, errorHandler){ window.resolveLocalFileSystemURL(path, fileSystem => fileSystem.createReader().readEntries(successHandler, errorHandler), errorHandler) } 或更好,你可以查看 Promises;避免代码中出现回调地狱。

标签: javascript arrays array-push


【解决方案1】:

你的for循环是错误的,你需要改变

for (var i = 0; i == entries.length; i++) {
    pdfListPath.push(entries[i]);
};  

for (var i = 0; i < entries.length; i++) {
    pdfListPath.push(entries[i]);
};  

(不是 100% 确定,也许是 &lt;= 你最好检查一下 ientries.length

【讨论】:

  • 谢谢,但问题不在这个
猜你喜欢
  • 1970-01-01
  • 2019-12-29
  • 1970-01-01
  • 2016-06-29
  • 2020-09-03
  • 2012-10-02
  • 1970-01-01
  • 2017-10-01
相关资源
最近更新 更多