javascript - AngularJS 创建延迟函数

标签 javascript angularjs promise q

我是 angularJS 的新手,在 promise 方面仍然有一些困难......我有以下功能:

   removeMultipleAttachments: function(docid, rev, attachmentIDs) {

        var p = $q.when();
        angular.forEach(attachments, function(file, index) {
            return p.then(function (formerRes) {
                return pouch.removeAttachment(docid, attachmentIDs[index], rev);
            }).then(function(res) {
                rev = res.rev;
                $rootScope.$apply();
            });
        })
   }

并希望能够调用它并在它完成时使用 .then() 和响应,例如:

removeMultipleAttachments(mydocID, myRev, myAttachments).then(function(responses){ ---is called only when done ---  })

最佳答案

执行 $q.when() 创建一个空的 resolved promise

您要做的是链完成。你快到了,问题是你在 forEach 而不是链接中返回。

尝试:

removeMultipleAttachments: function(docid, rev, attachmentIDs) {

        var p = $q.when();
        var retvals = [];
        angular.forEach(attachments, function(file, index) {
            p = p.then(function (formerRes) { // NOTE THE ASSIGNMENT HERE
                return pouch.removeAttachment(docid, attachmentIDs[index], rev);
            }).then(function(res) {
                retvals.push(res);
                rev = res.rev;
                $rootScope.$apply(); // You really don't need the apply here
            });
        })
        return p.then(function(){ return retvals; }); // AND THE RETURN HERE
   }

请注意,这将顺序执行,一次一个 promise 。如果你想一次执行所有的请求,你可以使用$q.all:

removeMultipleAttachments: function(docid, rev, attachmentIDs) {
    var p = $q.when();
    return $q.all(attachments.map(function(file,index){ 
        // not sure what to do with the res.rev = rev part
        return pouch.removeAttachment(docid,attachmentIDs[index], rev);
    });
}

关于javascript - AngularJS 创建延迟函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24111070/

相关文章:

javascript - 在 AngularJS 中设置子 div 的高度

javascript - 一个 Promise 按顺序调用未知(动态)数量的异步方法

javascript - 不知道为什么内心的 promise 没有被触发

javascript - 如何在 Node 中运行两个查询并将它们传递给渲染函数?

javascript - jquery svg 变换颜色动画

javascript - tinymce - fontsizeselect 格式显示值

javascript - JavaScript 中的 for-in 迭代

javascript - Google map - jQuery - Php 集成检查

javascript - 如何从 Node.js 服务器将函数传递给客户端

java - 如何在 Spring MVC 应用程序中运行 Angular 2 页面?