gpt4 book ai didi

javascript - 这里为什么要用到setTimeout函数呢?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:20:51 25 4
gpt4 key购买 nike

以下代码来自Essential JavaScript Design Patterns For Beginners .这里为什么要用到setTimeout函数?

var pubsub = {};
(function(q) {

var topics = {},
subUid = -1;

q.publish = function(topic, args) {

if (!topics[topic]) {
return false;
}

setTimeout(function() {
var subscribers = topics[topic],
len = subscribers ? subscribers.length : 0;

while (len--) {
subscribers[len].func(topic, args);
}
}, 0);

return true;

};

q.subscribe = function(topic, func) {

if (!topics[topic]) {
topics[topic] = [];
}

var token = (++subUid).toString();
topics[topic].push({
token: token,
func: func
});
return token;
};

q.unsubscribe = function(token) {
for (var m in topics) {
if (topics[m]) {
for (var i = 0, j = topics[m].length; i < j; i++) {
if (topics[m][i].token === token) {
topics[m].splice(i, 1);
return token;
}
}
}
}
return false;
};
}(pubsub));

最佳答案

这样 publish 函数会立即返回,以某种方式安排给定的代码块稍后立即执行(异步)。

看起来它通知了一堆监听器,所以作者想稍后运行通知循环,而不是阻塞 publish 代码。另请注意,客户端代码不需要通知的结果(如果有)。

副作用是,如果其中一个订阅者抛出异常,publish 方法不受影响(不同的调用堆栈)。

也许这不是惯用的,但它是 JavaScript 中很常见的模式。有时它也用于让其他事件/超时运行 - 特别是在运行时间很长的函数中。

关于javascript - 这里为什么要用到setTimeout函数呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8899465/

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