gpt4 book ai didi

javascript - 如何在执行下一行代码之前等待 Backbone 事件触发完成

转载 作者:行者123 更新时间:2023-12-02 19:52:39 26 4
gpt4 key购买 nike

我遇到过这样的情况:我打开一个“连接到某物”窗口,然后执行 POST 请求。

我的做法是:

GlobalEventBus.trigger("connection")
doPost()

现在发生的是:一个连接窗口打开,我希望用户输入凭据,但在窗口打开后会立即触发 POST 请求。

我尝试放置一个 while 循环来检查 bool 变量以查看它是否已完成,但是即使在“连接”窗口打开之前,该 while 循环也会被触发。

我之前没有 UI 或 JavaScript 方面的经验。我怎样才能做到这一点?

最佳答案

您可以使用 trigger 的可选参数:

trigger object.trigger(event, [*args])
Trigger callbacks for the given event, or space-delimited list of events. Subsequent arguments to trigger will be passed along to the event callbacks.

所以你可以这样做:

GlobalEventBus.trigger("connection", function() { doPost() });
// or
GlobalEventBus.trigger("connection", doPost);

然后 'connection' 事件的监听器将从其参数列表中获取该函数并在适当的时间调用它。您必须小心,只有一个监听器调用传递的回调函数或修改回调函数,以便多次调用它只会导致一次 doPost() 调用。

或者,您可以完全删除 'connection' 事件,转而使用一个连接必要回调的简单函数:

app.getConnectionAnd(function() { doPost() });

然后 getConnectionAnd() 将打开对话框并将传递的函数附加到其“ok”回调。如果您有其他用途,您仍然可以触发事件,但仅仅因为您有通用事件总线并不意味着您必须将其用于所有用途。

如果您真的喜欢 Backbone 事件,您可以重新设计您的应用程序,但请避免以下顺序:

GlobalEventBus.trigger("connection");
doPost();

相反,您可以添加另一个触发 doPost 的事件:

  1. 请注意您想要调用 function() { doPost() } 的全局可访问位置。
  2. GlobalEventBus.trigger("connection") 被触发。
  3. 有人监听上述内容时会弹出对话框,询问连接详细信息。
  4. 对话框建立连接并触发 GlobalEventBus.trigger('connected') 事件。
  5. 监听 'connected' 事件的人会查找应该调用的内容,注意到它是 (1) 中的函数,调用它,并将要调用的函数重置为未定义

关于javascript - 如何在执行下一行代码之前等待 Backbone 事件触发完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9090476/

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