Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/395.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/40.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript ipcMain.handle内的fs.readdir不返回_Javascript_Node.js_Electron_Readfile_Ipcmain - Fatal编程技术网

Javascript ipcMain.handle内的fs.readdir不返回

Javascript ipcMain.handle内的fs.readdir不返回,javascript,node.js,electron,readfile,ipcmain,Javascript,Node.js,Electron,Readfile,Ipcmain,它总是返回未定义的,有什么想法吗? 我需要在fs.reddir中返回,但要相对于ipcMain //main ipcMain.handle('pegaDirRomSalvo', async (event, argx=0) => { fs.readFile('dataCR.txt', 'utf8', function (err,data) { if (err) {return '0'} fs.readdir(data, (err, files) => {

它总是返回未定义的,有什么想法吗? 我需要在fs.reddir中返回,但要相对于ipcMain

//main

ipcMain.handle('pegaDirRomSalvo', async (event, argx=0) => {
  fs.readFile('dataCR.txt', 'utf8', function (err,data) {

    if (err) {return '0'}
    fs.readdir(data, (err, files) => {
          if (err) {throw err;}
          return [data,files] //<-------- not going
    })
   
  })
})


//render

ipcRenderer.invoke('pegaDirRomSalvo',a=0).then((result)=>{
         document.getElementById('divCaminho').innerText = result[0]
})
//main
ipcMain.handle('pegaDirRomSalvo',异步(事件,argx=0)=>{
fs.readFile('dataCR.txt','utf8',函数(err,data){
if(err){返回'0'}
fs.readdir(数据,(错误,文件)=>{
if(err){throw err;}
返回[数据、文件]//{
document.getElementById('divCaminho')。innerText=result[0]
})

您需要使用
event.sender.send
触发另一个调用,从
main
调用
呈现程序
返回结果,最后一个将使用
ipcrederer.on
收听结果。下面是一个示例解决方案:

渲染器:

const { ipcRenderer } = require('electron');
ipcRenderer.invoke('pegaDirRomSalvo', a=0);
ipcRenderer.on('FILES_LIST_FETCHED', (event, result) => {
     console.log(result);
     document.getElementById('divCaminho').innerText = result[0]
});
const { ipcMain } = require('electron');
ipcMain.handle('pegaDirRomSalvo', async (event, argx=0) => {
     fs.readFile('dataCR.txt', 'utf8', function (err,data) {
          if (err) { return '0'; }
          fs.readdir(data, (err, files) => {
               if (err) {throw err;}
               event.sender.send('FILES_LIST_FETCHED', [data, files]);
          })
     });
});
main:

const { ipcRenderer } = require('electron');
ipcRenderer.invoke('pegaDirRomSalvo', a=0);
ipcRenderer.on('FILES_LIST_FETCHED', (event, result) => {
     console.log(result);
     document.getElementById('divCaminho').innerText = result[0]
});
const { ipcMain } = require('electron');
ipcMain.handle('pegaDirRomSalvo', async (event, argx=0) => {
     fs.readFile('dataCR.txt', 'utf8', function (err,data) {
          if (err) { return '0'; }
          fs.readdir(data, (err, files) => {
               if (err) {throw err;}
               event.sender.send('FILES_LIST_FETCHED', [data, files]);
          })
     });
});
如果需要,您也可以返回错误详细信息

编辑:此技术通常在使用
ipcrender发送
renderer
调用时使用。使用
ipcMain发送
main
并在
main
进程上接收。在

文档中:

如果侦听器返回承诺,承诺的最终结果将作为对远程调用方的答复返回。否则,侦听器的返回值将用作答复的值

//main
ipcMain.handle(“pegaDirRomSalvo”,(事件,argx=0)=>{
返回新承诺((解决、拒绝)=>{
readFile(“dataCR.txt”,“utf8”,函数(err,data){
如果(错误){
拒绝(错误);
返回;
}
fs.readdir(数据,(错误,文件)=>{
如果(错误){
拒绝(错误);
返回;
}
解析([数据、文件]);
});
});
});
});
//渲染
ipcRenderer.invoke(“pegaDirRomSalvo”,(a=0))。然后((结果)=>{
document.getElementById(“divCaminho”).innerText=result[0];
});
可以使用
async/await
fs对代码进行重构。承诺
更具可读性

//main
const fsPromisified=要求(“fs/承诺”);
handle(“pegaDirRomSalvo”,异步()=>{
const data=wait fsPromisified.readFile(“dataCR.txt”、“utf-8”);
const files=wait fsPromisified.readdir(数据);
返回[数据、文件];
});
//渲染
(异步()=>{
试一试{
const result=await ipcdrenderer.invoke(“pegaDirRomSalvo”);
document.getElementById(“divCaminho”).innerText=result[0];
}捕捉(错误){
//处理错误
}
})();
也可以在主进程中处理错误