gpt4 book ai didi

javascript - 如何在 JavaScript 中处理多个回调

转载 作者:行者123 更新时间:2023-11-28 02:01:46 24 4
gpt4 key购买 nike

如何处理多个回调?现在只有我注册的第一个被解雇了..

这是我当前用于处理回调的代码(此代码正在异步加载)

var widget = function () {
var onNameCallback,
onTriggedCallback;


function getName(callback) {
onNameCallback = callback;
}

function onTrigg(callback) {
onTriggedCallback = callback;
}


/** lots of code ... **/


if(typeof onNameCallback == 'function') {
// Fire the callback
onNameCallback('1');
}

if(typeof onTriggedCallback == 'function') {
// Fire the callback
onTriggedCallback('hello');
}


/** lots of code ... **/

return {
getName:getName,
onTrigg:onTrigg,
};
}();

if (window._test) {
for (var i = 0; i < _test.length; i++) {
var method = _test.shift();
try {
widget[method].apply(widget, _test);
} catch (err) {
console.log(err);
}
var method = _test.shift();
}
};

这是我注册它们的方法:

_test.push('getName', function(data) {
console.log(data);
});

_test.push('onTrigg', function(data) {
console.log(data);
});

但由于某种原因,只有 getName 被触发..

有什么想法吗?

最佳答案

代码的主要问题是,当您从数组中移动项目时,您会向上计数 i ,从而使数组的长度变小。您将循环遍历数组中的一半项目。相反,只需在数组中剩余任何内容时循环即可。

此外,当您使用 apply 调用该方法并发送数组中的所有剩余项目时,您将方法名称从数组中移动两次并忽略其中一个(实际上是处理程序)作为参数。这实际上并不会阻止代码正常工作,但很难遵循它实际想要完成的任务。将两个值从数组中移出,然后使用 call 方法调用带有单个参数的方法。

if (window._test) {
while (_test.length > 0) {
var method = _test.shift();
var handler = _test.shift();
try {
widget[method].call(widget, handler);
} catch (err) {
console.log(err);
}
}
}

编辑:

如果您希望将每个回调放在一个数组中,只需将其从 _test 数组中移动即可:

if (window._test) {
while (_test.length > 0) {
var callback = _test.shift();
try {
widget[callback[0]].call(widget, callback[1]);
} catch (err) {
console.log(err);
}
}
}

关于javascript - 如何在 JavaScript 中处理多个回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18340148/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com