gpt4 book ai didi

javascript - JQuery 阻塞异步初始化

转载 作者:行者123 更新时间:2023-11-28 20:38:46 26 4
gpt4 key购买 nike

我正在为 SignalR 中心编写 AngularJS 服务。这是我提供服务的工厂:

.factory('gameManager', [function () { 
$.connection.hub.start();
var manager = $.connection.gameManager;
return manager;
}])

该代码将是完美的,除了 .start() 调用是异步的,并且 hub到经理返回时尚未完成启动。基本上,我想在返回经理之前阻止直到开始完成。 .start() 方法返回一个 Jquery deferred对象,我猜这是答案的一部分,但我不知道如何在没有回调函数的情况下使用它?

最佳答案

像下面这样的东西应该可以解决问题。

app.factory('gameManager', [function () { 
return $.connection.hub.start().then(function() {
return $.connection.gameManager;
});
}])

现在您的回调函数也将返回一个延迟/ promise ,因此服务使用者需要对此有所期待。您使用的代码可能如下所示:

gameManager.then(function(gameManager) {

// do whatever with game manager
gameManager.doSomething();
});

jquery Deferred are here 的文档。特别是,请查看Deferred.then() .

请注意:

the deferred.then() method returns a new promise that can filter the status and values of a deferred through a function ... These filter functions can return a new value to be passed along to the promise's .done() or .fail() callbacks, or they can return another observable object (Deferred, Promise, etc) which will pass its resolved / rejected status and values to the promise's callbacks...

<小时/>

更新:

另一种方法(可能是更好的方法 - 因为它不需要您的消费者处理 promise )是让集线器完全初始化,然后再设置您的工厂并启动您的应用程序 Controller 。像这样的事情...

$.connection.hub.start().then(function() {
app.factory('gameManager', function() {
return $.connection.gameManager;
});

// ...
// kick off the rest of the app..

});

关于javascript - JQuery 阻塞异步初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14792335/

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