如果我打电话connect
来自 doStuff
,我收到“套接字已连接”的消息,但 callback
不叫。我在这里缺少什么?
$scope.connect = function() {
var defer = $q.defer();
ws = new WebSocket("ws://server.com:port");
ws.onopen = function(){
console.log("Socket connected");
defer.resolve("socket connected");
};
return defer.promise;
}
$scope.doStuff = function() {
$scope.connect().then(function(data) {
console.log("And we're off!", data);
});
}
最佳答案
在 AngularJS 中,promise 结果在 $digest 循环中异步传播。因此,您使用 then() 注册的回调函数只会在进入 $digest 循环时被调用。
因此,当您的套接字连接时,我们处于摘要循环中。 then()
创建一个新的 promise ,但结果 then()
直到下一个摘要循环才会传播,该循环永远不会出现(因为没有 $timeout
或 $http
或 DOM 事件来触发一个)。正如@Ajay 刚刚发布的那样,如果您添加 $scope.$apply(),它将导致一个摘要循环,您将看到结果。
关于angularjs - Angular JS 中未调用 Promise 回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16323323/