AngularJS $q
发布日期:2021-05-07 20:59:11 浏览次数:15 分类:原创文章

本文共 2593 字,大约阅读时间需要 8 分钟。

$q用于执行异步操作

一、基本用法

<!DOCTYPE html><html><head>    <meta charset="utf-8">    <title>AngularJS</title>    <script src="angular.min.js"></script>    <!--<script src="angular-route.min.js"></script>-->    <script src="angular-translate.min.js"></script>    <script src="angular-translate-loader-static-files.js"></script>    <!--<script src="angular-cookie.min.js"></script>--></head><body ng-app='index' ng-controller="indexController"></body><script>    angular.module('index',[]);    angular.module('index').controller('indexController',['$scope','$injector',        function indexController($scope, $injector){            var indexFactory = $injector.get('indexFactory');        // 在执行此异步方法时,不会影响其他代码执行        indexFactory.then(function (value) {                // 成功            console.log('value:', value);        },function (reason) {                // 失败        });        console.log("end");    }]);    angular.module('index').factory('indexFactory', ['$injector', function translationLoader($injector) {            // 必要的服务        var $http = $injector.get('$http');        var $timeout = $injector.get('$timeout');        var $q = $injector.get('$q');        // 创建一个deferred        var deferred = $q.defer();        $http({                method  : 'POST',            url     : '/T/zh.json'        }).then(function (res) {                $timeout(function () {                    deferred.resolve(res.data); // 异步请求成功执行deferred.resolve            }, 1000* 10);        },function() {                deferred.reject("fail"); // 任务失败执行        });        console.log("translation.promise:", deferred.promise);        return deferred.promise;    }]);</script></html>

二、$q多个promise串行

function f1() {       var defer = $q.defer();   setTimeout(function() {          defer.resolve(1);   }, 2000);   return defer.promise;}function f2() {       var defer = $q.defer();    setTimeout(function() {           defer.resolve(2);    }, 2000);    return defer.promise;}function f3() {       var defer = $q.defer();    setTimeout(function() {           defer.resolve(3);    }, 2000);    return defer.promise;}//f1进行完,在进行f2,然后进行f3,后一个程序等待前一个完成f1().then(function (data) {       console.log(data);  // 2s后打印1    return f2();}).then(function (data) {       console.log(data);   // 再过2s后打印2    return f3();}).then(function (data) {       console.log(data);  // 再过2s后打印3});

三、 $q.all

$q.all,表示只有当传入的多个deferred执行成功才算成功

var p=$q.all({       dataA:deferA.promise,    dataB:deferB.promise})p.then(function(result){       console.log(result.dataA); // this is DATA A    console.log(result.dataB); // this is DATA B})
上一篇:AngularJS $destroy
下一篇:AngularJS 国际化

发表评论

最新留言

关注你微信了!
[***.104.42.241]2025年04月14日 09时57分57秒