【问题标题】:Reactive array is empty反应数组为空
【发布时间】:2018-07-27 09:14:02
【问题描述】:

我正在使用 Meteor CollectionFS 上传文件。我正在使用 ephmer:reactive-array 将文件 ID 存储在集合中之后。以下是代码:

Template.myFileHandler.created = function () {
    this.fileIds = new ReactiveArray();
}

我上传 CollectionFS 文档中指定的文件:

Template.myFileHandler.events = function () {
    'submit #myFileForm': function (event, template) {
        for(var i = 0; i < fileList.length; i++) {
            var fsFile = FS.File(fileList[i]);
            UserDocuments.insert(file, function (err, fileObj) {
                Template.instance().fileIds.push(fileObj._id);
            });
        }
        console.log(Template.instance().fileIds.get().length)
    }
}

当我执行 console.log 时,我得到长度:0。如何将 ID 存储在反应数组中?

【问题讨论】:

  • 正如@gaëtan-rouziès 回答所说,这是一个简单的回调/异步代码误解。阅读回调指南,例如:medium.freecodecamp.org/…

标签: meteor collectionfs


【解决方案1】:

您只是在插入函数中传递了一个回调。但是回调是异步的,只有在插入完成后才会执行。

所以您的代码仍然有效。尝试像这样将您的 console.log 放入您的回调中:

Template.myFileHandler.events = function () {
    'submit #myFileForm': function (event, template) {
        for(var i = 0; i < fileList.length; i++) {
            var fsFile = FS.File(fileList[i]);
            UserDocuments.insert(file, function (err, fileObj) {
                Template.instance().fileIds.push(fileObj._id);
                console.log(Template.instance().fileIds.get().length); // Here it will show 1
            });
        }
        console.log(Template.instance().fileIds.get().length); // Here, the insert hasn't happened yet
    }
}

【讨论】:

    猜你喜欢
    • 2022-07-19
    • 1970-01-01
    • 1970-01-01
    • 2018-11-02
    • 1970-01-01
    • 2019-08-10
    • 1970-01-01
    • 2021-01-14
    • 2022-01-11
    相关资源
    最近更新 更多