AngularJS 工厂函数添加承诺
AngularJS factory function add promise
我正在 angular 工厂中创建一个函数。我需要这个功能 return 承诺。然后我添加其他功能。
SPApp.factory('processing', ['$http', '$rootScope', '$q', function ($http, $rootScope) {
function initialize($scope, status) {
$http({
method: 'GET',
url: '/api/ApiCustomer/GetCustomerDetails'
}).then(function (data) {
if (data.data.ModelValue == null) {
$rootScope.redirectToLogin();
} else {
$scope.CustomerInformation = data.data.ModelValue;
}
}).then(function () {
$http({
method: 'GET',
url: '/api/ApiList/AccountTypeList'
}).success(function (result) {
$scope.accountTypeList = result;
typeOfAccount = result;
});
// get currncy list
$http({
method: 'GET',
url: '/api/ApiList/CurrencyList'
}).success(function (result) {
$scope.currencyList = result;
//jQuery('#ProfileImage').attr('src', "/Content/Images/blank-avatar.jpg");
});
$http({
method: 'GET',
url: '/api/ApiList/BankListByUserType',
}).success(function (result) {
$scope.bankList = result;
});
});
};
return {
initialize: initialize
}
}]);
以及如何将此函数作为 promise 调用并使用 then
processing.initialize($scope, true).then(function(){
console.log("hello world");
});
如果你知道这个过程,现在就不行了请帮忙
你应该 return Promise
来自工厂
SPApp.factory('processing', ['$http', '$rootScope', '$q', function ($http, $rootScope, $q) {
function initialize($scope, status) {
return $http({
method: 'GET',
url: '/api/ApiCustomer/GetCustomerDetails'
});
}
return {
initialize: initialize
}
}
]);
在控制器方法中使用输出
processing.initialize($scope, true).then(function (data) {
$scope.basicInfo = data.data.ModelValue.PersonalInformations[0];
});
根据评论初始化函数有多个http
请求你可以使用$q.all()
方法等待所有的承诺完成。
SPApp.factory('processing', ['$http', '$rootScope', '$q', function ($http, $rootScope, $q) {
function initialize($scope, status) {
var returnData = {},
var a = $http({
method: 'GET',
url: '/api/ApiCustomer/GetCustomerDetails'
}).then(function (response) {
returnData.basicInfo = response.data.ModelValue.PersonalInformations[0];
});
var b = $http({
method: 'GET',
url: '/api/ApiList/AccountTypeList'
}).then(function (response) {
returnData.accountTypeList = response;
});
return $q.all([a, b]).then(function () {
return returnData;
});
}
return {
initialize: initialize
}
}
]);
你应该
return
承诺而不只是执行它
- 使用 promise 链并在工厂外部处理接收到的数据,而不是在
$scope
内部传递
- 另外
$q
服务似乎未使用(不确定您的计划)。
工厂代码
SPApp.factory('processing', ['$http', '$rootScope', function ($http, $rootScope) {
function initialize(status) {
return $http({
method: 'GET',
url: '/api/ApiCustomer/GetCustomerDetails'
}).then(function (data) {
return data.data.ModelValue.PersonalInformations[0];
}
}
return {
initialize: initialize
}
}]);
用法
processing.initialize(true).then(function(personalInformation){
console.log(personalInformation);
});
查看下面link了解angular中的promise函数,这有助于解决这个问题
我正在 angular 工厂中创建一个函数。我需要这个功能 return 承诺。然后我添加其他功能。
SPApp.factory('processing', ['$http', '$rootScope', '$q', function ($http, $rootScope) {
function initialize($scope, status) {
$http({
method: 'GET',
url: '/api/ApiCustomer/GetCustomerDetails'
}).then(function (data) {
if (data.data.ModelValue == null) {
$rootScope.redirectToLogin();
} else {
$scope.CustomerInformation = data.data.ModelValue;
}
}).then(function () {
$http({
method: 'GET',
url: '/api/ApiList/AccountTypeList'
}).success(function (result) {
$scope.accountTypeList = result;
typeOfAccount = result;
});
// get currncy list
$http({
method: 'GET',
url: '/api/ApiList/CurrencyList'
}).success(function (result) {
$scope.currencyList = result;
//jQuery('#ProfileImage').attr('src', "/Content/Images/blank-avatar.jpg");
});
$http({
method: 'GET',
url: '/api/ApiList/BankListByUserType',
}).success(function (result) {
$scope.bankList = result;
});
});
};
return {
initialize: initialize
}
}]);
以及如何将此函数作为 promise 调用并使用 then
processing.initialize($scope, true).then(function(){
console.log("hello world");
});
如果你知道这个过程,现在就不行了请帮忙
你应该 return Promise
来自工厂
SPApp.factory('processing', ['$http', '$rootScope', '$q', function ($http, $rootScope, $q) {
function initialize($scope, status) {
return $http({
method: 'GET',
url: '/api/ApiCustomer/GetCustomerDetails'
});
}
return {
initialize: initialize
}
}
]);
在控制器方法中使用输出
processing.initialize($scope, true).then(function (data) {
$scope.basicInfo = data.data.ModelValue.PersonalInformations[0];
});
根据评论初始化函数有多个http
请求你可以使用$q.all()
方法等待所有的承诺完成。
SPApp.factory('processing', ['$http', '$rootScope', '$q', function ($http, $rootScope, $q) {
function initialize($scope, status) {
var returnData = {},
var a = $http({
method: 'GET',
url: '/api/ApiCustomer/GetCustomerDetails'
}).then(function (response) {
returnData.basicInfo = response.data.ModelValue.PersonalInformations[0];
});
var b = $http({
method: 'GET',
url: '/api/ApiList/AccountTypeList'
}).then(function (response) {
returnData.accountTypeList = response;
});
return $q.all([a, b]).then(function () {
return returnData;
});
}
return {
initialize: initialize
}
}
]);
你应该
return
承诺而不只是执行它- 使用 promise 链并在工厂外部处理接收到的数据,而不是在
$scope
内部传递 - 另外
$q
服务似乎未使用(不确定您的计划)。
工厂代码
SPApp.factory('processing', ['$http', '$rootScope', function ($http, $rootScope) {
function initialize(status) {
return $http({
method: 'GET',
url: '/api/ApiCustomer/GetCustomerDetails'
}).then(function (data) {
return data.data.ModelValue.PersonalInformations[0];
}
}
return {
initialize: initialize
}
}]);
用法
processing.initialize(true).then(function(personalInformation){
console.log(personalInformation);
});
查看下面link了解angular中的promise函数,这有助于解决这个问题