我有两个函数,我希望在其他函数成功解析之后再调用一个函数。
$scope.createNewWorkModule = function (data, selectedUser) {
$scope.workOrderInfo = $localStorage.workOrderInfo;
$scope.createNewWorkOrder($scope.workOrderInfo).then(function (response) {
$scope.workOrderId = $localStorage.workOrderId;
var newWM = {
name: data.name,
};
$scope.myPromise = operationsFactory.createWorkModule(angular.toJson(newWM)).success(function (response) {
$rootScope.workModules = response.result;
return $scope.workOrder;
})
});
};
$scope.createNewWorkOrder = function (data) {
var newWD = {
name: data.name,
description: data.description,
user_id: $cookies.userId
};
$scope.myPromise = operationsFactory.createWorkOrder(angular.toJson(newWD)).success(function (response) {
$localStorage.workOrderId = response.result.id;
})
return $localStorage.workOrderId;
};
我正在尝试使用$scope.createNewWorkOrder
来呼叫.then
但是它会给出错误
TypeError: Cannot read property 'then' of undefined
at Scope.$scope.createNewWorkModule (work-order-create-controller.js:36)
at $parseFunctionCall (angular.js:12158)
。
我该如何解决这个问题?
更新
无法使用检索到的数据更新视图:
<div class="panel panel-default">
<div class="panel-heading font-bold">
<span>List of Work Modules</span>
</div>
<ul ng-repeat="wm in workModules" style="list-style: none">
<li>{{wm.name}}</li>
<li>{{wm.description}}</li>
</ul>
</div>
答案 0 :(得分:1)
您收到错误then is not a function
,因为返回的值为undefined
,因为$localStorage.workOrderId
已解析为异步。理想情况下,你应该回复一个承诺。
return operationsFactory.createWorkOrder(angular.toJson(newWD)).success(function (response) {
$localStorage.workOrderId = response.result.id;
return $localStorage.workOrderId;
});
答案 1 :(得分:1)
then
成功函数始终返回链中下一个处理程序所需的值(并且不要使用已弃用的.success
方法,因为它不能正确链接,请始终使用{ {1}}但请注意,从.then
结果获得的参数略有不同。除非你真的需要它们,否则尽量不要把东西放进$http
,可能你的很多函数都只是函数,值可能是控制器中的局部变量。
请注意,一旦使用$scope
,您可以在一个成功处理程序结束时发出新调用,并在同一级别处理另一个.then
的结果,无需进一步嵌套。
.then