简体   繁体   中英

Is there a way to see if a function is done executing?

I have a class with many objects, and I need to see if the function for each of these objects is done being executed.

I have tried using an array, where I keep track of each function's status, but it's pretty inefficient. Are there any other ways to do this?

The objects are for dialogue in a small game I'm making.

This is the example of the code I have right now:

var functionExecuted = [false, false, false, false, false, false];

The function in the class takes a parameter of where the object's function is in the array. At the end of the function in the class, I do this:

functionExecuted[this.funcExecutedIndex] = true;

And then later once the function is finished executed, I continue on with the program

The reason why I have to check for this is because I'm working with the HTML canvas, and if I don't wait for the function to finish being executed, it draws on top of it.

functions in JS are just objects, as such you can store them in a Set.

The nice thing about using a Set's, it avoids you having to maintain that funcExecutedIndex , and you can use it to find out if a particular function has been executed, and it's size can be used to check if all functions have been executed..

Below is a simple example.

 class Procs { executed = new Set(); one() { this.executed.add(this.one); } two() { this.executed.add(this.two); } whatsExecuted() { console.log('one executed: ' + this.executed.has(this.one)); console.log('two executed: ' + this.executed.has(this.two)); } allExecuted() { return this.executed.size === 2; } } const procs = new Procs(); procs.whatsExecuted(); console.log('---'); procs.one(); procs.whatsExecuted(); console.log('all done: ' + procs.allExecuted()); console.log('---'); procs.two(); procs.whatsExecuted(); console.log('all done: '+ procs.allExecuted());

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM