Javascript 如何解决电子失效问题&x27;什么时间间隔?
我在尝试编写电子应用程序时遇到了一个难题。以下是问题的详细说明: 我计划在电子渲染过程的页面上加载一个时钟。就像我们的系统时间一样,它会每秒刷新一次,60秒是一分钟,以此类推,但我不使用系统时间,我使用当前时间API,这个API接口返回的json数据是当前时间。我在main.js主进程中编写了一组异步执行函数,以获取此API传递的数据。以下是主进程main.js异步获取时间API代码:Javascript 如何解决电子失效问题&x27;什么时间间隔?,javascript,request,electron,settimeout,setinterval,Javascript,Request,Electron,Settimeout,Setinterval,我在尝试编写电子应用程序时遇到了一个难题。以下是问题的详细说明: 我计划在电子渲染过程的页面上加载一个时钟。就像我们的系统时间一样,它会每秒刷新一次,60秒是一分钟,以此类推,但我不使用系统时间,我使用当前时间API,这个API接口返回的json数据是当前时间。我在main.js主进程中编写了一组异步执行函数,以获取此API传递的数据。以下是主进程main.js异步获取时间API代码: const request = net.request('http://api.k780.com:88/?ap
const request = net.request('http://api.k780.com:88/?app=life.time&appkey=10003&sign=b59bc3ef6191eb9f747dd4e83c99f2a4&format=json')
request.on('response', (response) => {
console.log(response.statusCode);
console.log(response.headers);
response.on('data', (chunk) => {
let result = JSON.parse(chunk).result;
let datetime = result.datetime_1;
let week = result.week_4;
console.log(datetime, week)
mainWindow.webContents.send('datetime', { datetime, week });
})
response.on('end', () => {
console.log('end');
})
})
request.end();
主进程显示的控制台信息如下:
200
{
server: 'nginx',
date: 'Thu, 06 May 2021 01:38:00 GMT',
'content-type': 'application/json; charset=utf-8;',
'transfer-encoding': 'chunked',
connection: 'keep-alive',
'access-control-allow-origin': '*'
}
2021-05-06 09:38:01 Thursday
end
function getNetTime() {
//Get the date and time passed by the main process
ipcRenderer.on('datetime', (event, arg) => {
let datetime = arg.datetime; //Get date and time
let week = arg.week; //Get the day of the week
let year = datetime.substring(0, 4); //Get year
let month = datetime.substring(5, 7); //Get month
let day = datetime.substring(8, 10); //Get the day
let hour = datetime.substring(10, 13); //Get hour
let min = datetime.substring(14, 16); //Get minutes
let sec = datetime.substring(17, 19); //Get seconds
let weekday = ""; //Get Chinese weekday
const timeText = document.querySelector('#timeText')
// console.log(datetime);
// console.log(week);
// console.log(year,month,day,hour,min);
switch (week) {
case'Monday':
weekday ='Monday';
break;
case'Tuesday':
weekday ='Tuesday';
break;
case'Wednesday':
weekday ='Wednesday';
break;
case'Thursday':
weekday ='Thursday';
break;
case'Friday':
weekday ='Friday';
break;
case'Saturday':
weekday ='Saturday';
break;
case'Sunday':
weekday ='Sunday';
break;
}
timeText.innerHTML =`${year}year${month}month${day}day ${weekday}${hour}:${min}:${sec}`;
});
然后在请求此API之后,它将以当前时间的时间戳进行响应。主进程获得此时间戳后,它将通过webContents.send发送到我的渲染进程。以下是主进程发送到渲染进程的代码:
mainWindow.webContents.send('datetime', { datetime, week });
渲染进程通过ipcRenderer.on获取主进程发送的时间数据,然后格式化此时间戳并将其输出到“我的渲染进程”页面。我将这组代码作为函数编写如下:
200
{
server: 'nginx',
date: 'Thu, 06 May 2021 01:38:00 GMT',
'content-type': 'application/json; charset=utf-8;',
'transfer-encoding': 'chunked',
connection: 'keep-alive',
'access-control-allow-origin': '*'
}
2021-05-06 09:38:01 Thursday
end
function getNetTime() {
//Get the date and time passed by the main process
ipcRenderer.on('datetime', (event, arg) => {
let datetime = arg.datetime; //Get date and time
let week = arg.week; //Get the day of the week
let year = datetime.substring(0, 4); //Get year
let month = datetime.substring(5, 7); //Get month
let day = datetime.substring(8, 10); //Get the day
let hour = datetime.substring(10, 13); //Get hour
let min = datetime.substring(14, 16); //Get minutes
let sec = datetime.substring(17, 19); //Get seconds
let weekday = ""; //Get Chinese weekday
const timeText = document.querySelector('#timeText')
// console.log(datetime);
// console.log(week);
// console.log(year,month,day,hour,min);
switch (week) {
case'Monday':
weekday ='Monday';
break;
case'Tuesday':
weekday ='Tuesday';
break;
case'Wednesday':
weekday ='Wednesday';
break;
case'Thursday':
weekday ='Thursday';
break;
case'Friday':
weekday ='Friday';
break;
case'Saturday':
weekday ='Saturday';
break;
case'Sunday':
weekday ='Sunday';
break;
}
timeText.innerHTML =`${year}year${month}month${day}day ${weekday}${hour}:${min}:${sec}`;
});
现在遇到的问题是,尽管当前时间可以在渲染过程的页面上正常显示,但无法自动刷新。我想通过setTimeout或setInterval将其设置为每1000毫秒刷新一次,这相当于1秒时钟中的一步。但它没有效果。当前时间只能在程序重新打开时显示,并且无法自动刷新。以下是setInterval的代码:
window.onload = () => {
getNetTime();
setInterval(getNetTime(),1000)
}
以上就是我现在遇到的问题。电子也刚刚开始接触。我在网上搜索了很长时间。但是没有用。请帮助或尝试给出一些实现方法。您遇到的问题与Electron或您如何从API请求数据无关。这是关于你如何设置你的间歇时间 需要一个函数或一个代码字符串作为参数。但是,您将
getNetTime()
指定为它应该调用的代码。这不是一个函数。它是一个函数调用,将在调用setInterval()
之前进行计算。这不会做任何事情,因为getNetTime()
的返回类型是undefined
为了缓解这种情况,可以使用函数、箭头函数或省略括号。无论你选择什么,都取决于你的喜好
setInterval(getNetTime,1000);
//或
setInterval(()=>getNetTime(),1000);
//或
setInterval(函数(){getNetTime();},1000);
这是否回答了您的问题?