我是 websocket 和延迟函数的新手,如果这很愚蠢,请原谅。
据我了解,当您启动一个函数并希望在第一个函数完成时再次启动时使用延迟。
我有一个 websocket 发送两个事件。在客户端调用 ajax 请求以获取要插入页面的 html 代码。我需要在插入来自第二个事件的事件代码之前插入来自其 ajax 请求的第一个事件代码。第一个并不总是发送,但是当它是 2 个事件时,我得到了:
- 接收 evt1
- 接收 evt2
- 构造html2
- 构造html1
所以我想在 evt1 代码完成后执行 evt2 代码。
- 接收 evt2
- 如果 evt1 收到但未结束,请等待
- 否则执行
更新
这是我解决问题的方法,不知道这是否是最好的方法,但它有效。
var evt1_promise = 0 ;
function evt1_fct(topic, data)
{
evt1_promise = $.Deferred() ;
$.ajax({ type: "POST", url: "php/html_evt1.php", async: false }).done(function(data) { $(".Container").html(data) ; evt1_promise.resolve() }) ;
}
function evt2_fct(topic, data)
{
// In case there's no event 1 started
if(!evt1_promise)
{
evt1_promise = $.Deferred() ;
evt1.resolve() ;
}
evt1_promise.done(function()
{
$.ajax({ type: "POST", url: "php/quizz_start.php", data: datas, async: false }).done(function (data) { $(".Quizz").html(data) } }) ;
}) ;
}