angularjs - Angular JS 中未调用 Promise 回调

标签 angularjs websocket jquery-deferred

如果我打电话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/

相关文章:

ruby - 测试绑定(bind)到 EventMachine::WebSocket 事件的 block 有哪些策略?

javascript - 使用 Jasmine 测试 Web 套接字

websocket - 实时应用需要推送服务建议

javascript - 如果有多个动画元素,如何知道 jquery 效果何时结束

javascript - 在 jQuery 中取消延迟 promise

jquery - 如果回调可能需要拒绝延迟对象,我可以手动解析它吗?

javascript - 从 Angular Controller 调用html脚本标签中定义的javascript函数

javascript - 如何在 ng-repeat 过滤器中使用范围变量?

jquery - 显示 TableView 结构

java - 当请求数量很大时,HTTP post方法显示400错误