AngularJS Promise

先看两个官方文档

https://docs.angularjs.org/api/ng/service/$http

http://fdietz.github.io/recipes-with-angular-js/consuming-external-services/deferred-and-promise.html

首先呢  要知道$http和$.ajax一样   本身是可以直接链式的调用 .success .error 的(jQuery里面的ajax是failed)

那么为什么我还需要dfd呢  dfd更灵活,可以在很多地方使用  不仅仅局限于http请求

这里有个比较搓的例子 感受一下他们的区别

        var list = dataSource.makeHttpRequest(‘/list‘, ‘POST‘, {
                "xxx": xxx
            });
        list.httpRequest.success(function(data){
            console.log(data);
        });
        list.promise.then(function(data){
            console.log(data);
        });

dataSource是我定义的一个factory  返回的httpRequest就是$http.post   而Promise则是dfd.promise

    myApp.factory(‘dataSource‘, [‘$http‘, ‘$q‘, function($http, $q) {
        return {
            makeHttpRequest: function(url, method, params) {
                var httpRequest;
                var defer = $q.defer();

                if (method == ‘GET‘) {

                    //$http.get()
                } else if (method == ‘POST‘) {
                    httpRequest = $http.post(url, params);
                    httpRequest.success(function(data) {
                        if (data.status == 0) {
                            defer.resolve(data);
                        } else {
                            defer.reject(data);
                        }

                    }).error(function(msg) {
                        defer.reject(msg);
                    });
                }

                return {
                    promise: defer.promise,
                    httpRequest: httpRequest
                }
            }
        }
    }]);
时间: 2024-11-15 12:06:33

AngularJS Promise的相关文章

AngularJS promise的使用

<!doctype html> <html ng-app="myApp"> <head> <link rel="stylesheet" href="http://cdn.jsdelivr.net/foundation/4.3.2/css/foundation.min.css"> <script src="https://ajax.googleapis.com/ajax/libs/an

AngulaJS实战总结, 带你进入AngularJS世界(待续)

AngulaJS实战总结, 带你进入AngularJS世界(待续) 使用AngularJS  进行Hybrid App 开发已经有一年多时间了,这里做一个总结. 一.AngularJS 初始化加载流程 1.浏览器载入HTML,然后把它解析成DOM.2.浏览器载入angular.js脚本.3.AngularJS等到DOMContentLoaded事件触发.4.AngularJS寻找ng-app指令,这个指令指示了应用的边界.5.使用ng-app中指定的模块来配置注入器($injector).6.注

使用AngularJS 进行Hybrid App 开发已经有一年多时间了,这里做一个总结

一.AngularJS 初始化加载流程 1.浏览器载入HTML,然后把它解析成DOM.2.浏览器载入angular.js脚本.3.AngularJS等到DOMContentLoaded事件触发.4.AngularJS寻找ng-app指令,这个指令指示了应用的边界.5.使用ng-app中指定的模块来配置注入器($injector).6.注入器($injector)是用来创建“编译服务($compile service)”和“根作用域($rootScope)”的.7.编译服务($compile se

Ionic开发之条形码扫描

最近项目开发中有扫描条码的需求,查阅一些资料之后发现ngCordova扩展了cordova的插件–BarcodeScanner,提供了以下格式的条码扫描. QR Code Data Matrix UPC E UPC A EAN 8 EAN 13 Code 128 Code 39 ITF 完美的支持所有格式,插件本身使用流行的库ZXing. 将条码扫描器整合进Android和iOS应用的步骤如下: 1.新建项目 ionic start IonicProject blank cd IonicProj

AngulaJS实战总结

一.AngularJS 初始化加载流程 1.浏览器载入HTML,然后把它解析成DOM. 2.浏览器载入angular.js脚本. 3.AngularJS等到DOMContentLoaded事件触发. 4.AngularJS寻找ng-app指令,这个指令指示了应用的边界. 5.使用ng-app中指定的模块来配置注入器($injector). 6.注入器($injector)是用来创建“编译服务($compile service)”和“根作用域($rootScope)”的. 7.编译服务($comp

【给你一个承诺 - 玩转 AngularJS 的 Promise】

了解Promise 在谈论Promise之前我们要了解一下一些额外的知识:我们知道JavaScript语言的执行环境是"单线程",所谓单线程,就是一次只能够执行一个任务,如果有多个任务的话就要排队,前面一个任务完成后才可以继续下一个任务. 这种"单线程"的好处就是实现起来比较简单,容易操作:坏处就是容易造成阻塞,因为队列中如果有一个任务耗时比较长,那么后面的任务都无法快速执行,或导致页面卡在某个状态上,给用户的体验很差. 当然JavaScript提供了"异

AngularJS 中的Promise --- $q服务详解

    阅读目录 什么是Promise $q服务 先说说什么是Promise,什么是$q吧.Promise是一种异步处理模式,有很多的实现方式,比如著名的Kris Kwal's Q还有JQuery的Deffered. 回到顶部 什么是Promise 以前了解过Ajax的都能体会到回调的痛苦,同步的代码很容易调试,但是异步回调的代码,会让开发者陷入泥潭,无法跟踪,比如: funA(arg1,arg2,function(){ funcB(arg1,arg2,function(){ funcC(arg

angularJS中XHR与promise

angularJS应用是完全运行在客户端的应用,我们可以通过angularJS构建一个不需依赖于后端,同时能够实现动态内容和响应的web应用,angularJS提供了将应用与远程服务器的信息集成在一起的方法 $http服务 angularJS提供了内置的$http服务直接同外部进行通信,$http服务封装了浏览器原生的XMLHttpRequest对象 $http服务只接收一个参数对象,包含了用来生成http请求的配置内容,$http函数返回一个promise对象,具有success和error两

AngularJS 中的 Promise 和 设计模式

Promises And Design Patterns 写得好长好长好长长~ 解决 Javascript 异步事件的传统方式是回调函数:调用一个方法,然后给它一个函数引用,当这个方法完结的时候执行这个函数引用. $.get('api/gizmo/42', function(gizmo) { console.log(gizmo); // or whatever }); 看起来很不错对不对,不过,也有缺点的:首先,合并或者链接多个异步过程超复杂:要么就是大量的模板代码,要么就是嗯哼你懂的回调地狱(