Function JS函数的事件侦听器

Function JS函数的事件侦听器,function,monitoring,Function,Monitoring,我们可以知道JS函数何时完成运行。示例:我有一个进程较长的函数,我希望监视该进程,或者至少知道它何时完成。有几种方法可以知道函数何时完成运行 同步函数 如果所讨论的函数完全同步运行,那么调用该函数的代码将等待它完成后再执行。例如: function a() { // do something } function b() { a(); console.log("a is done"); // will only run once a is finished } fun

我们可以知道JS函数何时完成运行。示例:我有一个进程较长的函数,我希望监视该进程,或者至少知道它何时完成。

有几种方法可以知道函数何时完成运行

同步函数 如果所讨论的函数完全同步运行,那么调用该函数的代码将等待它完成后再执行。例如:

function a() {
    // do something
}

function b() {
    a();
    console.log("a is done"); // will only run once a is finished
}
function a() {
    // do something
    console.log("did something");
    // do something else
    console.log("done");
}
异步函数 在JavaScript中,这是完成此任务的另一种方法,即使您有异步调用,它们也可以工作—例如,对服务器的请求等。要开始,请让第一个函数返回一个承诺:

function a() {
    return new Promise((resolve, reject)=>{
        // do something
        resolve(); // once we're done, resolve the promise
    });
}
promise的构造函数采用一个函数,该函数采用两个参数,
resolve
reject
,这两个参数由JavaScript提供给它。处理完成后,可以调用
resolve()
函数,如果遇到表示无法解决的错误,可以调用
reject()
函数

要使用此功能,您可以执行以下操作:

function b() {
    a().then(()=>{
         console.log("a is done"); // will only run once a is finished
    });
}
运行承诺的好处在于,所有其他代码都可以继续运行——除了传递到
then
方法中的匿名函数之外,承诺后面没有任何东西被阻止对于类似的事情,我肯定会采用这种方法。

监测进展/记录 至于监控功能的进度,这实际上取决于功能的工作方式。最好的办法可能是在长函数到达某些部分时调用某种日志函数。例如:

function a() {
    // do something
}

function b() {
    a();
    console.log("a is done"); // will only run once a is finished
}
function a() {
    // do something
    console.log("did something");
    // do something else
    console.log("done");
}
如果出于任何原因无法更改函数
a()
,那么就没有好的方法可以做到这一点(我知道),除非您知道它会更改一些全局变量,并且您可以检查它是否有更改,但是像这样的方法是非常危险的,肯定不是一种好的方法

结论 在不知道您想要监控哪种功能/流程的情况下,我真的不能说太多了——例如,我没有在这里介绍过检查文件上传进度

同样,如果该过程发生在不同的服务器或设备上,那么这些方法根本不起作用-您可能需要签出或(更可能)获取这些任务的进度更新