我已经获得了一个我无法编辑的脚本(作为练习的一部分)。在脚本中,有一个函数可以为一组给定的[假]用户生成随机消息。 (它应该模仿聊天室。)
我需要检测何时生成了消息。截至目前,我唯一能想到的是使用setInterval()
并反复检查length
之类的内容,以查看是否添加了新邮件。但是,我希望我的聊天室更新作为创建的消息,使其看起来像是实时完成的(而不是仅在{{1}注意到它时进行更新我意识到我可以让间隔非常小,但这似乎非常低效,特别是如果消息之间存在较大的间隙。
有没有办法检查生成消息的功能是否已被触发"?
答案 0 :(得分:3)
如果您无法控制某项功能,则无法检查该功能是否已被调用。但你可以做的是,像这样覆盖它
public void Handle(SomeCommand message)
{
try
{
//Do thing that might throw exception
}
catch (SpecificException ex)
{
_bus.Send(new Address("errorQueue", "machine"), message);
}
catch (Exception ex)
{
throw ex;
}
}
答案 1 :(得分:1)
假设您无法更改调用消息生成器的代码,您可以按如下方式更新消息生成器函数。
基本上,您可以使原始消息生成器函数调用您自己的更改寄存器函数以及原始消息生成器函数。
var original = function () { $("#results").append("<p>Original message-generator function</p>");};
var theCopy = original;
var changeRegister = function() { $("#results").append("<p>New function that registers that a change has been made</p>"); };
var override = function() { theCopy(); changeRegister(); };
original = override;
original();
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="results"></div>
答案 2 :(得分:0)
您可以使用仅在第一个函数(生成随机消息的函数)完成时触发的回调函数。
function generateMessage(param1, function() {
// generate message
function2(); // callback function
});
function function2() {
console.log('message generated!');
}
答案 3 :(得分:0)
您可以将原始函数重新定义为与原始函数同名的变量;在$.when()
内调用新变量时返回原始函数,使用.then()
记录调用原始函数的时间
function message() {
var n = Math.random() * 10000;
$("body").append("<br>" + n)
}
// set `message` as a variable that returns original `message` function
var messasge = function() {
return $.when(message()).then(function() {
// do stuff when `message` called
console.log("\nmessage called")
})
}
var count = 0, max = 10, timer;
timer = setInterval(function() {
if (count !== max) {
messasge();
++count;
} else {
clearInterval(timer)
}
}, 2000)
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
</script>
&#13;