我已经四处搜索,我认为我的代码是正确的,但由于某种原因,它仍然失败。
我的控制器:
$scope.unsubscribe = function()
{
bluetoothFactory.unsubscribe().then(function()
{
$scope.info = 'unsubscribe success';
},
function(error)
{
$scope.error = error;
});
};
我的工厂:
unsubscribe: function() {
var q = $q.defer();
$window.bluetoothSerial.unsubscribe().then(function (){
q.resolve();
}, function(error) {
q.reject(error);
});
return q.promise();
}
从我的控制器中我只需调用:$ scope.unsubscribe()并收到此错误:
TypeError: Cannot read property 'then' of undefined
at Object.unsubscribe (bluetoothFactory.js:37)
at Scope.$scope.unsubscribe (bluetoothController.js:84)
at Scope.$scope.submitReads (bluetoothController.js:118)
at $parseFunctionCall (ionic.bundle.js:21044)
at ionic.bundle.js:53458
at Scope.$eval (ionic.bundle.js:23100)
at Scope.$apply (ionic.bundle.js:23199)
at HTMLButtonElement.<anonymous> (ionic.bundle.js:53457)
at HTMLButtonElement.m.event.dispatch (jquery.js:4670)
at HTMLButtonElement.r.handle (jquery.js:4338)
我的代码出了什么问题?
答案 0 :(得分:1)
如果我需要在数据到达控制器之前对数据进行一些处理,我只包装promises。你不是在这里做的。如果$window.bluetoothSerial
已经返回一个承诺,那么您不会通过将其包装在另一个承诺中来添加任何值。
另一件事是Angular $q
deferred
与jQuery deferred
略有不同。要返回承诺,请使用return q.promise
代替return q.promise()
。
你的工厂并没有真正做任何事情,所以你可以做几件事:
unsubscribe: $window.bluetoothSerial.unsubscribe
或
unsubscribe: function() { return $window.bluetoothSerial.unsubsribe(); }