首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从js函数返回的数据未到达调用函数

从js函数返回的数据未到达调用函数
EN

Stack Overflow用户
提问于 2017-01-28 12:07:08
回答 2查看 47关注 0票数 1

我在这里遵循了Electron文件系统教程:

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

其中包括以下代码,用于弹出加载文件对话框:

代码语言:javascript
复制
        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);

以及用于实际读取文件的以下代码:

代码语言:javascript
复制
        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中。但是我所有返回数据的尝试都失败了(特别是'return data;‘最后一行在哪里,或者在最后一个花括号之前)。这两种方法都不会导致调用函数获取数据。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-28 12:19:22

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

创建回调

代码语言:javascript
复制
function fileReadComplete(data) {
    myData = data;
    // Do whatever you want
}

并将其称为。

代码语言:javascript
复制
readFile(fileNames[0], fileReadComplete);

更改您的readfile函数:

代码语言:javascript
复制
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;
        });
    }
票数 0
EN

Stack Overflow用户

发布于 2017-01-28 12:17:15

据我所知,这应该是你想要的。

// Update,由return改为回调函数

代码语言:javascript
复制
    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], function(myData){
                 console.log(myData);
                });

            }
        }); 
    },false);

    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;
        });
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41906218

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档