延迟服务电话直到循环后

时间:2018-01-02 03:32:59

标签: angular angular2-services typescript2.0 angular5

我的组件中有一个功能,即将文件处理成一个数组,然后通过调用其中一个函数将数组上传到数据服务

我正在将上传的CSV文件解析为JSON数据数组。在processFiles函数中,我循环遍历数组以将数据推送到processedData数组。之后,我从数据服务中调用this.passData.pushPassedData函数来推送已处理的数据。

问题是{for}循环完成处理文件之前正在执行this.passData.pushPassedData函数,并且只向空数组推送数据服务。

files = []; // array to store uploaded files
processedData = []; // array to store processed JSON data

processFiles() {
    for (let file of this.files) {
        this.papaService.parse(file, {
            header: true,
            dynamicTyping: true,
            complete: (results) => {
                console.log("Detected: ", results.data);

                for (let entry of results.data) {
                    if (entry.Interface !== "") {
                        let _entry: RuleFormat;

                        _entry = {
                            abc: "xyz",
                            def: "123",
                        }
                        this.processedData.push(_entry);
                        console.log("Pushed: " + JSON.stringify(_entry));
                    }
                }
            }
        })
    }
    console.log("Pushed: " + JSON.stringify(this.processedData));
    this.passData.pushPassedData(this.processedData);
}

从控制台,我可以看到只有在调用数据服务功能后数据才会被推送到数组中。

有没有办法让函数调用等待for循环?

1 个答案:

答案 0 :(得分:2)

您可以在tell中添加一个计数器,并在processFiles回调中将其递增。处理完所有文件后,您可以致电complete

this.passData.pushPassedData