Ich bin Gebäude-und Elektronen-App, die eine Seite lädt und einige Tests auf einer Seite durchführen, sobald die Seite geladen ist. Ich möchte eine Zeitüberschreitung beim Laden der Seite erzwingen, sagen wir also nach 5 Sekunden, wenn die Seite nicht geladen wird, gehen Sie zum nächsten Element.Javascript setTimeout/clearTimeout seltsames Verhalten in Elektron
Mein Code ist so etwas wie dies in meinem Haupt-Prozess:
var timer;
var urls = [...];
var win = new BrowserWindow({...});
var myURL = "";
var setTimer = function(){
timer = setTimeout(()=>{
console.log(myURL + " timed out");
loadNext();
}, 5000);
}
var loadNext = function(){
if (urls.length > 0){
timer = setTimer();
myURL = urls.pop();
console.log(myURL);
win.loadURL(myURL;
}
}
win.webContent.on('did-finish-load',() => {
clearTimeout(timer);
browserWindow.webContents.send('doTest');
})
ipcMain.on('testResult', (event, data) => {
console.log('done test ' + data);
event.returnValue = 'yay';
})
Und in meinem Prozess machen, gibt es ein Zuhörer, die zu ‚dotext‘ hört und wird synchron eine Nachricht schicken.
Für den größten Teil dieser Code Arbeit: wenn die Seite nach 5s nicht Last beenden, bewegt er sich auf die nächste URL und Ausgang korrekte Nachricht wie folgt aus:
url1
url1 timed out
url2
done test url2
url3
url3 timed out
...
jedoch gelegentlich, es gibt out-Ausgang wie folgt aus:
urla
urla timed out
urlb
done test urla
done test urlb
urlc
done test urlc
erwartete ich die clearTimeout
würde die Timeout-Funktion entfernen, bevor ich die Anforderung auszusenden Test durchführen, so sollte die done test urla
nie nach urla timed out
Ausgang passieren. Was ist los?