$ q.defer()真的有用吗?

时间:2014-03-01 22:53:55

标签: angularjs asynchronous q

我正在学习Angular JS,目前我正在尝试理解promises和异步编程,我对$q.defer()有疑问。我的观点如下:通常当人们使用承诺时他们会做类似的事情,考虑到$ q已经可用

function someAsyncFunction() {
    var deferred = $q.defer();

    /* Do things and if everything goes fine return deferred.resolve(result) 
       otherwise returns deferred.reject()
     */

    return deferred.promise;
}

这到底是做什么的?当我们执行var deferred = $q.defer()时,它会立即将该函数的所有执行切换到另一个线程并返回promise作为对此操作结果的引用,该操作仍然在那里执行?

这是我们在创建异步方法时应该考虑的方式吗?

2 个答案:

答案 0 :(得分:0)

Angular的$q服务基于Javascript库Q。您可以在Q documentation中详细了解该信息,或阅读github repo中的代码。我认为这部分从文档的介绍中剔除了最好的解释:

  

如果函数无法返回值或抛出异常而没有   阻止,它可以返回一个承诺。承诺是一个对象   表示函数的返回值或抛出异常   可能最终提供。承诺也可以用作a的代理   远程对象,以克服延迟。

答案 1 :(得分:0)

使用$ q u异步运行函数。 延迟对象表示某事,某些任务已完成。

var defer = $q.defer(); // we create deferred object, which will finish later.

defer.promise // we get access to result of the deferred task

.then( // .then() calls success or error callback
    function(param) {
        alert("i something promised " + param);
        return "something";
    }); // u can use 1 or more .then calls in row

 defer.resolve("call"); //returns promise

这里的例子: http://jsfiddle.net/nalyvajko/HB7LU/29048/