从js函数返回的数据没有到达调用函数

时间:2017-01-28 04:07:08

标签: javascript electron

我在这里关注Electron文件系统教程:

How to choose , read, save, delete or create a file with Electron Framework

其中包括以下代码以提取加载文件对话框:

        document.getElementById('select-file').addEventListener('click',function(){
            dialog.showOpenDialog(function (fileNames) {
                if(fileNames === undefined){
                    console.log("No file selected");
                }else{
                    document.getElementById("actual-file").value = fileNames[0];
                    readFile(fileNames[0]);
                    // myData = readFile(fileNames[0]);  <--- 
                }
            }); 
        },false);

以下代码实际读取文件:

        function readFile(filepath) {
            fs.readFile(filepath, 'utf-8', function (err, data) {
                if(err){
                    alert("An error ocurred reading the file :" + err.message);
                    return;
                }

                document.getElementById("content-editor").value = data;
            });
        }

如您所见,最后一行使用导入的数据更新DOM。但是,我想将数据返回给我的调用函数,因为它不是HTML。请注意第一个剪切结束时的注释行。这就是我想要做的事情。

实际上,XML必须被处理而不是转储到DOM中。但是我所有返回数据的尝试(特别是&#39;返回数据;&#39;无论是最后一行还是最后一个大括号之前)都失败了。调用函数都不会导致获取数据。

调用函数是否需要等待这个函数完成?或者,更有可能的是,我没有正确地从这种类型的函数返回数据。非常感谢任何帮助。

2 个答案:

答案 0 :(得分:0)

据我了解,这应该做你想要的。

//更新;从“返回”变为回调函数。

q.scoregraph

答案 1 :(得分:0)

由于您的readFile(filepath)正在执行异步文件读取操作,因此您无法在此处使用简单返回。但是,您可以将回调传递给readFile函数,并在稍后使用数据完成读取操作时调用它。像这样。

创建回调

function fileReadComplete(data) {
    myData = data;
    // Do whatever you want
}

并将其称为。

readFile(fileNames[0], fileReadComplete);

更改readfile函数:

function readFile(filepath, callback) {
        fs.readFile(filepath, 'utf-8', function (err, data) {
            if(err){
                alert("An error ocurred reading the file :" + err.message);
                return;
            }
            callback(data);
            document.getElementById("content-editor").value = data;
        });
    }