当前位置: 首页 > 知识库问答 >
问题:

$qpromise与下划线_each

东门子昂
2023-03-14

所以我在angularjs服务器中有一个方法,它调用一个方法,为数组中的每个方法返回一个promise。我使用下划线_each在数组中循环。我想等到整个数组被处理后,再调用方法中的最后一行代码...

所以...

function ProcessCoolStuff(coolStuffs)
{
 var stuff = [];
 _.each(coolStuffs, function(coolStuff)
 {
   //Some method using $q to return 
   makeStuffCooler(coolStuff).then(function(coolerStuff)
  {
   stuff.push(coolerStuff);
  });
 });
 //Maybe Call a Display Method, or call event ect.. 
 ShowAllMyCoolStuff(stuff);
}

这当然行不通。。循环完成并调用“ShowAllMyColStuff”,然后对每个项目执行MakeSuffCooler。所以与async方法交互的正确方法是什么,这样我的ShowAllMyColStuff方法将等待集合填充完成?这可能是我在$q和promise方面缺乏经验,但我被卡住了。提前谢谢。

共有3个答案

邢财
2023-03-14

在我读了问题和相应的答案之后,我走上了正确的轨道。谢谢你!但在最后的工作解决方案中,我又花了一个小时让所有用例都工作起来。这就是为什么我想分享一个代码示例,其中包含链式promise,包括等待解决的promise数组。

用例后台是上传后的服务器端(nodeJs)文件导入。我使用promise来返回适当的http状态和结果。

readFile: function (fileName) {
    if (fileName) {
        var deferred = Q.defer();
        var self = this;
        converter({input: fileName}, function (error, userData) {
            if (error) {
                deferred.reject(error);
            }
            self.storeUsers(error, userData)
                .then(function (success) {
                    if (success) {
                        deferred.resolve(success)
                    }
                })
                .fail(function (error) {                       
                    deferred.reject(error)                      
                });
        });
        return deferred.promise;
    }
},

storeUsers: function (error, data) {
    return Q.all(_.map(data, function (users, emailAddress) {
        var deferred = Q.defer();
        userRepository.findUserByEmail(emailAddress, function (user) {
            //...
            user.save(function (error) {
                if (error) {
                    deferred.reject(error);
                } else {
                    deferred.resolve(emailAddress);
                }
            });

        });
        return deferred.promise;
    }));
}

希望这也有帮助!

干杯,本

裴和怡
2023-03-14
$q.all([promise1,promise2,promise3,etc])
.then(function(results){
   alert("This alert will happen after all promises are resolved.");
 })
李新霁
2023-03-14

您希望使用$q.all,它接受一系列promise。因此,使用map而不是each,并将结果传递给$q.all(),这会给您一个等待所有结果的promise。您甚至不需要手动填充的数组,只需要使用新promise的分辨率值即可。

function processCoolStuff(coolStuffs) {
    return $q.all(_.map(coolStuffs, makeStuffCooler));
}
processCoolStuff(…).then(showAllMyCoolStuff);

 类似资料:
  • underline(resource $resourchHandle, Format::const $style): \Vtiful\Kernel\Format 示例 $format = new \Vtiful\Kernel\Format($fileHandle); $underlineStyle = $format->underline(Format::UNDERLINE_SI

  • >>> class MyClass(): ... def __init__(self): ... self.__superprivate = "Hello" ... self._semiprivate = ", world!" ... >>> mc = MyClass() >>> print mc.__superprivate Traceback (most recen

  • 问题内容: 看起来XStream(com.thoughtworks.xstream-> xstream 1.4.2)正在以一种非常奇怪的方式处理元素和属性名称中的下划线。我需要从属性中带有下划线的客户那里获取并解析xml。这是我第一次尝试使用XStream,但由于希望避免所有丑陋的xml解析,我有些失望。 在这里,我提供了一个小的测试样本来阐明这一行为。最后一个例子显示了我的问题。 这个输出 现在

  • 问题内容: 我正在尝试使JLabel带有下划线。我到处搜寻,但一无所获。即使在属性中,也没有为JLabel下划线的选项。我能做什么? 问题答案: 要么

  • 我已经实现了Custom edittext,具有自定义样式: 这是屏幕: 这里只有光标,现在当我再次选择光标时,我得到如下结果: 我不想要光标下方的黄色下划线。 这是在Moto g4和android 7.0中测试的。 编辑还在错误上下划线,如果我seterror和文本不可见的错误:

  • 本文向大家介绍python中单下划线和双下划线分别是什么?相关面试题,主要包含被问及python中单下划线和双下划线分别是什么?时的应答技巧和注意事项,需要的朋友参考一下 name:一种约定,python内部的名字,是用来与用户自动以的名字区分开,防止冲突