使用setimeout使名称空间函数异步

时间:2016-10-11 18:55:42

标签: javascript

我有这个使用命名空间的功能。我想让它异步。假设在点击某个按钮时调用了这个函数?

var ns = {
            somemfunc: function (data) {
                alert("hello");
            }
        }

编辑 - 很抱歉对此不清楚。我想通过将settimeout函数放在somefunc函数中来异步调用此函数。不知道怎么做。

提前致谢

1 个答案:

答案 0 :(得分:0)

您可以通过在setTimeout的定义中添加somefunc块来异步调用此函数,请注意我在松散地使用术语异步,因为此函数实际上并没有异步工作。异步函数是一个执行某些工作需要花费一些时间来执行的函数,例如发出网络请求,聚合其结果然后向调用者报告以执行某种DOM刷新等等,它通常会报告回来在长时间运行的代码运行时,调用者使用回调或解析/拒绝承诺,事件队列未被阻止,并且可以继续处理其他操作,如果不是这样,则应用程序将无响应,直到长期运行的任务完成了计算。

你想在这里实现的并不是真正的异步,因为你只需要在2秒内安排在事件队列上运行的功能。

var ns = {
    somemfunc: function (data) {
       setTimeout(function() {
            alert("hello");
       }, 2000);
    }
}

ns.somemfunc();

当调用ns.somefunc()时,它现在设置为在2000ms(2秒)内在事件队列上执行函数somefunc。记住Javascript是单线程的,任务被安排在事件队列上运行并将被连续处理。如果将超时设置为在2000ms之后运行该函数,但是之前的作业需要500ms来计算,那么我们实际上等待2500ms以便队列为该函数提供服务。