从Salesforce Aura Helper读取文件的递归问题

时间:2019-08-23 06:22:55

标签: javascript recursion salesforce es6-promise salesforce-lightning

我试图在aura helper上以异步方式读取文件,但是递归没有发生,只执行了一次。该代码非常简单,并尝试了许多方法,但没有一项工作。

我尝试在onload函数上使用return关键字,也尝试使用关键字self,但看起来aura找不到重新调用的函数this.uploadPromise

控制器

handleFilesChange:function (component, event, helper) {
    var fileSize = component.get("v.FileList")[0].size;
    var file = component.get("v.FileList")[0];

    helper.uploadPromise(0, fileSize, file).then(function (result) {
        console.log('done!!!'+result);
    },function (error) {
        console.log(error);
    }).catch(function (error) {
        $A.reportError("error message here", error);
    });
}

助手

 uploadPromise: function (startposi, endposi, file) {
    console.log('coming into  recursive function : startposition:' + startposi + ',endpposition' + file.size + '.file:' + file);
    var BYTES_PER_CHUNK = 320 * 1024;
    return new Promise(function (resolve, reject) {
        if (startposi < endposi) {
            console.log('Reading from:' + startposi + ',until;' + (startposi + BYTES_PER_CHUNK ) + '/' + endposi);
            var chunk = file.slice(startposi, BYTES_PER_CHUNK);
            var reader = new FileReader();
            reader.readAsArrayBuffer(chunk);
            reader.onload = function (e) { // return handler function for 'onload' event
                startposi+= e.target.result.byteLength;
                console.log('before recursion: startposition:' + startposi + ',endpposition' + file.size + '.file:' + file + ",chunk size:" + e.target.result.byteLength);
                this.uploadPromise(startposi, file.size, file);
            }
        } else {
            console.log('finished reading file'); // it shows the content of the file
            return new Promise(function (resolve, reject) {
                resolve("finish");
            })
        }
    });
}

我希望将递归作为普通的递归调用执行,但只被调用一次。我已经使用纯JavaScript方法测试了此方法,并且效果很好,问题是何时迁移到Salesforce中的Aura。任何帮助我都会欠债。问候。

0 个答案:

没有答案