$q.defer() 真正做什么



我正在学习 Angular JS,目前我试图了解承诺和异步编程,我对$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()时,它会立即将该函数的所有执行切换到另一个线程,并返回承诺是对仍在执行的此操作结果的引用?

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

有了$q你异步运行函数。延迟对象表示某些任务已完成。

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/

Angular的$q服务基于Javascript库Q。您可以在 Q 文档中阅读有关它的更多信息,或者阅读 github 存储库中的代码。我认为从文档介绍中截取的这一部分最好地解释了它:

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

相关内容

  • 没有找到相关文章

最新更新