Javascript 将数据保存到文件并单击一个按钮关闭窗口

Javascript 将数据保存到文件并单击一个按钮关闭窗口,javascript,node.js,electron,Javascript,Node.js,Electron,我有一些数据需要保存到文件中。按一下按钮,我需要保存它,然后关闭窗口。但是,当我调用save()函数和close()函数时,窗口将在没有保存任何内容的情况下关闭 我尝试在一个事件上调用两个函数。我曾尝试创建一个函数,保存数据,然后关闭窗口 const-button=document.getElementById('done'); 按钮。addEventListener('单击',()=>{ closeWin(); }); 函数closeWin(){ saveData(); const remot

我有一些数据需要保存到文件中。按一下按钮,我需要保存它,然后关闭窗口。但是,当我调用save()函数和close()函数时,窗口将在没有保存任何内容的情况下关闭

我尝试在一个事件上调用两个函数。我曾尝试创建一个函数,保存数据,然后关闭窗口

const-button=document.getElementById('done');
按钮。addEventListener('单击',()=>{
closeWin();
});
函数closeWin(){
saveData();
const remote=require('electron')。remote;
var window=remote.getCurrentWindow();
window.close();
}
函数saveData(){
常数fs=要求('fs');
fs.writeFile('data.txt','testdata Output',函数(err){
如果(错误)抛出错误;
});
}
预期:数据保存到文件(本例中为txt)
输出:窗口关闭,创建的空白文件没有数据

对于保存功能,您应该返回一个
承诺
,或者
回调
,或者使用
writeFileSync
(不推荐)

使用承诺:

function saveData() {
  return new Promise((res, rej) => {
    fs.writeFile('data.txt', 'Test Data Output', function (err) {
      if (err) return rej(err);
      res();
    });
  })
}
然后关闭窗口,您也可以在此处使用
async wait

function closeWin() {
  saveData()
  .then(()=>{
    const remote = require('electron').remote;
    var win= remote.getCurrentWindow();
    win.close();
  })
}
异步等待版本:

async function closeWin() {
  await saveData();
  const remote = require('electron').remote;
  var win= remote.getCurrentWindow();
  win.close();
}
尝试使用回调:

function saveData(callback) {
// Write code for save your data here
  callback();
}
function closeWin(callback) {
  callback();
 }

closeWin( function() {
 saveData(function() {
   const remote = require('electron').remote;
   var win= remote.getCurrentWindow();
   win.close();
 });

});

保存是(或应该是)aync操作。你也可以添加saveData()函数吗?@WillJenkins补充说,
closeWin(回调)
是不必要的。并且结束块错误,您需要在
saveData
中传递函数。您当前的
saveData
函数是什么?在问题中编辑它。刚刚添加了我使用atm的完整测试代码。我注意到它将创建文件,但不会添加任何数据。在我认为它没有做任何事情之前,因为已经存在数据。您没有使用基于承诺的
saveData
,您的saveData将无法工作,因为它不会返回任何承诺。请使用我的答案中的
saveData
,否则请阅读承诺,它将极大地帮助您。刚刚开始工作。感谢异步工作。我确实这么做了,但我以为你想让我上传原始代码。将标记为现在已回答。谢谢,我也很困惑。没问题。