Let's say I have the following, very simple javascript code:
function addPicture(name){
var src = document.getElementById("mainConsole");
var img = new Image();
img.onload=function() {
img.id=name;
src.appendChild(img);
}
img.src = name;
}
function clearpicture(name){
var elem = document.getElementById(name);
elem.remove();
}
This seems to work fine as long as these functions aren't isolated in rapid succession. Making the user click on a link:
<a href="javascript:void(0);" onclick="clearpicture('1.jpg');">test1</a>
removes the picture as one would expect. However, if I just use this code:
addPicture("1.jpg");
clearpicture(1.jpg");
I get: TypeError: elem is null
. I can solve this problem with a promise!
let p = new Promise(function(resolve, reject) {
setTimeout(() => resolve(1), 1000); // (*)
console.log("now");
}).then(function(result) {
clearpicture("1.jpg");
});
Everything works normally (after the delay specified of course.) Then, I tried to make the promise wait on the addpicture subroutine instead of setTimeout:
let p = new Promise(function(resolve, reject) {
addPicture("1.jpg","1",100,0,0);
resolve(1);
}).then(function(result) {
clearpicture("1.jpg");
console.log("picture removed");
});
I get the same null
error. In my actual application, I have time for the image to load but if I try to remove a series of pictures at once:
clearpicture("1.jpg");
clearpicture("2.jpg");
clearpicture("3.jpg");
Nothing gets removed - although note there would be some delay since both of my subroutines do some processing before actually adding or removing anything.
How can I make javscript code wait on an image to be fully loaded or actually removed before it does anything else?