javascript - 回调中的内联回调函数?

标签 javascript callback

我有一个包含回调的函数,我想在它完成时有选择地中继回原始函数调用...如果这有意义的话。

例如:

const UI = {
    update : function(var1) {
        $(var1).animate({ opacity: 0 }, 100, "linear", function() {
                // Callback 1: Do stuff
        });
    }
}

我想要的是:

UI.update("whatever", function() {
   // Callback 2: Do more stuff after Callback 1 is complete
});

是否可以像这样内联?

最佳答案

是的,当然 - 只需为回调声明一个参数,然后如果 update 在动画结束时不需要做任何事情,只需将回调传递给 animate直接:

const UI = {
    update : function(var1, callback) {
// -------------------------^
        $(var1).animate({ opacity: 0 }, 100, "linear", callback); // ***
    }
};

如果 update 在调用回调之前需要做更多的工作,只需在 animate 回调中调用回调:

const UI = {
    update : function(var1, callback) {
    // ---------------------^
        $(var1).animate({ opacity: 0 }, 100, "linear", function() {
            // ...work `update` does here...
            // Call the callback:
            if (callback) {                                           // ***
                callback(/*...perhaps some arguments here...*/);      // ***
            }                                                         // ***
        });
    }
}

update 返回之前调用 callback 并不是问题。 animate 回调是 闭包¹,² 在 var1callback (更准确地说,是在它们存在的词法环境中),因此它们在 update 返回后仍可访问。

您可能会对上面显示的“真实”检查感到满意。其他时候,人们更严格,例如:

if (typeof callback === "function") {

(许多年前,在网络浏览器中,一些主机提供的函数的 typeof"object" 而不是 "function" code>,但所有现代浏览器都确保它现在是“函数”。)


有关闭包的更多信息:

¹ Closures are not complicated在我贫血的小博客上(一些过时的术语,但是......)

² Canonical Stack Overflow question about closures

关于javascript - 回调中的内联回调函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56819007/

相关文章:

javascript - 如何在我的网站中加载组件及其类

javascript - 从外部点击事件调用 jQuery 插件内的函数

javascript - 如何使用 Google Charts api Control Wrapper 进行标题列过滤器?

javascript .catch() 的一个回调和 .then() 的另一个回调?

javascript - 当最内层循环等待响应时如何延迟嵌套迭代?

javascript - socket.io (nodejs) 发出回调是否会通过在回调完成期间阻塞服务器来影响服务器性能?

可变长度参数的 Javascript 约定

ruby-on-rails - 观察者与回调

javascript - 为数组中的每个对象调用内部方法

javascript - 如何在 JavaScript 中反转数组,同时保留原始数组的原始值?