angularjs中的异步调用

时间:2015-01-06 14:22:28

标签: javascript angularjs asynchronous

我是Javascript和Angularjs的新手。我想知道,如何异步调用函数而不等待它从它返回。

请告诉我,如果有一些例子,那将非常有帮助。

此致 了nG

3 个答案:

答案 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返回承诺,然后您可以在功能完成后解决承诺。尝试这样的事情:

http://jsfiddle.net/adcoxwga/

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的链接。

干杯!