angular 之 $q

对于 $q 这个服务。

提供如下方法:

defer

var defer = function(){
    return Deferred();
}

对于defer ,拥有的方法有。

var defer = $q.defer();    // defer 对象。

defer.resolve(value)  // 

defer.reject(reason)   // 

defer.notify(value)    // 

var promise = defer.promise;   //////  promise 对象。

promise.then(successCallback,errorCallback,notifyCallback);

promise[catch](errorCallback);

promise[finally](callback,notifyCallback)

reject

var reject = function(reason){
    var result = new Deferred();
    result.reject(reason);
    return result.promise;
}

when

var when = function(value,callback,errback,progressBack){
    var result = new Deferred();
    result.resolve(value);
    return result.promise.then(callback,errback,progressBack);
}

resolve

var resolve = when

all

var all = function(promises){
    var deferred = new Deferred();
    var counter = 0;
    var results = isArray(promises)? []:{};
    
    forEach(promises,function(promise,key){
        counter++;
        when(promise).then(
            function(value){
                if(results.hasOwnProperty(key)) return ;
                
                results[key] = value;
                
                if(!(--counter)) deferred.resolve(results);
            },
            function(reason){
                if(results.hasOwnProperty(key)) return;
                deferred.reject(reason);
            }
        );
    });
    
    if(counter === 0){
        deferred.resolve(reaults);
    }
    
    return deferred.promise;
}

对于q 方法

var $Q = function Q(resolver){
    if(!(this instanceof Q)){
        return new Q(resolver);
    }
    
    var deferred = new Deferred();
    
    function resolveFn(value){
        deferred.resolve(value);
    }
    
    function rejectFn(reason){
        deferred.inject(reason);        
    }
    
    resolver(resolveFn,rejectFn);
    
    return deferred.promise;
}
时间: 2024-10-26 12:28:16

angular 之 $q的相关文章

浅谈Angular的 $q, defer, promise

1. $q $q是Angular的一种内置服务,它可以使你异步地执行函数,并且当函数执行完成时它允许你使用函数的返回值(或异常). 2. defer defer的字面意思是延迟,$q.defer() 可以创建一个deferred实例(延迟对象实例). deferred 实例旨在暴露派生的Promise 实例,以及被用来作为成功完成或未成功完成的信号API,以及当前任务的状态.这听起来好复杂的样子,总结$q, defer, promise三者之间的关系如下所示. var deferred = $q

深入理解jQuery、Angular、node中的Promise

最初遇到Promise是在jQuery中,在jQuery1.5版本中引入了Deferred Object,这个异步队列模块用于实现异步任务和回调函数的解耦.为ajax模块.队列模块.ready事件提供基础功能.在用jQuery操作DOM的时候对Promise的使用欲不够强烈,最近学习node和Angular,需要用js写业务逻辑和数据操作代码的时候这种场景需求就出来了.一般来说事件适合在交互场景中运用,因为用户的行为本来就是分散的,而promise这样的流程控制适合在后台逻辑中处理业务. //j

延迟对象$q和供应商配置config

1.angular总的$q和jquery中的延迟对象很类似,用法也差不多 m1.controller('meng',['$scope','$q',function($scope,$q){ var dfd = $q.defer(); function show(){ setTimeout(function(){ dfd.reject(); },2000); return dfd.promise; } show().then(function(){ alert('成功'); },function()

We have a problem with promises

原文地址:http://fex.baidu.com/blog/2015/07/we-have-a-problem-with-promises/ 用Javascript的小伙伴们,是时候承认了,关于 promises 我们一直存在着问题.并非说 promises 本身有问题,Promises/A+ 是极好的. 就我过去数年观察大量 PouchDB API 以及其他 promise-heavy API 的使用者们与这些 API 的搏斗中我发现,最大的问题是: 大部分使用 promises 的小伙伴们

Promise的前世今生和妙用技巧

浏览器事件模型和回调机制 JavaScript作为单线程运行于浏览器之中,这是每本JavaScript教科书中都会被提到的.同时出于对UI线程操作的安全性考虑,JavaScript和UI线程也处于同一个线程中.因此对于长时间的耗时操作,将会阻塞UI的响应.为了更好的UI体验,应该尽量的避免JavaScript中执行较长耗时的操作(如大量for循环的对象diff等)或者是长时间I/O阻塞的任务.所以在浏览器中的大多数任务都是异步(无阻塞)执行的,例如:鼠标点击事件.窗口大小拖拉事件.定时器触发事件

理解promise

原文地址: http://pouchdb.com/2015/05/18/we-have-a-problem-with-promises.html 用Javascript的小伙伴们,是时候承认了,关于 promises 我们一直存在着问题.并非说 promises 本身有问题,Promises/A+ 是极好的. 就我过去数年观察大量 PouchDB API 以及其他 promise-heavy API 的使用者们与这些 API 的搏斗中我发现,最大的问题是: 大部分使用 promises 的小伙伴

【转】We have a problem with promises

这是我看的自认为最好的一篇讲解如何使用Promise的文章,原文地址:http://fex.baidu.com/blog/2015/07/we-have-a-problem-with-promises/ 用Javascript的小伙伴们,是时候承认了,关于 promises 我们一直存在着问题.并非说 promises 本身有问题,Promises/A+ 是极好的. 就我过去数年观察大量 PouchDB API 以及其他 promise-heavy API 的使用者们与这些 API 的搏斗中我发

Angularjs中的promise

promise 是一种用异步方式处理值的方法,promise是对象,代表了一个函数最终可能的返回值或抛出的异常.在与远程对象打交道非常有用,可以把它们看成一个远程对象的代理. 要在Angular中创建promise需要使用内置的$q服务.先用factory定义一个服务,注入$q服务. angular.module('readApp').factory('asyncService', [ "$q", function ($q) { var myAsync=function(flag) {

Getting Started with Django Rest Framework and AngularJS

转载自:http://blog.kevinastone.com/getting-started-with-django-rest-framework-and-angularjs.html A ReSTful API is becoming a standard component of any modern web application. The Django Rest Framework is powerful framework for developing ReST endpoints