我是Javascript和Angularjs的新手。我想知道,如何异步调用函数而不等待它从它返回。
请告诉我,如果有一些例子,那将非常有帮助。
此致 了nG
答案 0 :(得分:1)
使用Angular的deferred
:
function myAsyncFunction() {
var deferred = $q.defer();
//..
setTimeout(function() {
deferred.resolve({ message: "resolved!" });
// or deferred.reject({ message: "something went terribly wrong!!" });
}, 1000);
//..
return deferred.promise;
}
myAsyncFunction()
.then(function(data){
// success
console.log("success", data.message);
}, function(data) {
// fail
console.log("error", data.message);
}).finally(function() {
// always
});
答案 1 :(得分:0)
您可以使用deferred返回承诺,然后您可以在功能完成后解决承诺。尝试这样的事情:
var myApp = angular.module('myApp',[])
.service('myService', function($q, $timeout){
this.someFunction = function(){
var deferred = $q.defer(); //making a new deferred
$timeout(function(){
deferred.resolve('something'); //resolving the deferred with a response
}, 3000);
return deferred.promise; //returning a promise
}
})
.controller('MyCtrl', function($scope, myService){
myService.someFunction().then(function(response){ //calling the asynchronous function
console.log(response); //getting response
}, function(error){
console.log(error); //getting error
});
});
答案 2 :(得分:0)
您前面有几个不同的选项,但需要注意的一点是您必须使用回调或承诺进行异步活动。由于你使用角度,我建议使用promise。
使用承诺
如果您正在向api撰写http电话,则可以使用$http
或$resource
。如果您开始研究角度提供程序,您将看到$http
返回一个promise,而$ resource返回一个promise,但您必须专门调用它才能访问它。例如:
someService
function someServiceFunction () {
return $http.get('some/url');
}
someController
$scope.results = [];
someService.someServiceFunction().then(function(data) {
$scope.results = data;
});
需要注意的是,第一个返回的函数是成功场景,如果你声明第二个回调,那么它就是失败场景。
如果您在同一场景中使用回调:
使用回调
someService
function someServiceFunction (callback) {
return $http.get('some/url')
.success(callback);
}
someController
$scope.results = [];
someService.someServiceFunction(function(data, status, headers, config) {
$scope.results = data;
});
以下是$http provider的链接。 这是$resource provider的链接。
干杯!