当前位置: 首页 > 面试题库 >

Q Promise Node.js如何循环解析

蒋岳
2023-03-14
问题内容

我有用nodejs编写的代码让我感到困惑 Q Promises

theFunction()
.then(function(data) {
    var deferred = Q.defer()
    var result = [];
    for(i=0; i < data.length; i++) {

        secondFunc(data.item)
        .then(function(data2) {
            data.more = data2.item
        });
        result.push(data);

    }

    deferred.resolve(result);
    deferred.promise();

});

我希望循环内第二个函数中的数据可以推入结果

所以我以前的数据是这样的

[
    {
        id: 1,
        item: 1,
        hero: 2
    },
    {
        id: 1,
        item: 1,
        hero: 2
    }
]

像这样

[
    {
        id: 1,
        item: 1,
        hero: 2,
        more: {
            list: 1
        }
    },
    {
        id: 1,
        item: 1,
        hero: 2,
        more: {
            list: 4
        }

    }
]

我尝试了几种方法,首先输入命令deferred.resolve();。循环中仅显示1个数据的语句有什么解决方案?


问题答案:

而不是deferred.resolve()在将立即解决的数组上使用Q.all,而是使用它等待一个promise数组

theFunction()
.then(function(data) {
    var result = [];
    for(var i=0; i < data.length; i++) (function(i){
        result.push(secondFunc(data[i].item)
        .then(function(data2) {
            data[i].more = data2.item;
            return data[i];
        }));
    })(i); // avoid the closure loop problem
    return Q.all(result)
});

甚至更好:

theFunction()
.then(function(data) {
    return Q.all(data.map(function(item)
        return secondFunc(item)
        .then(function(data2) {
            item.more = data2.item;
            return item;
        });
    });
});


 类似资料:
  • 问题内容: 如果我在一个循环中有一个循环,并且一旦满足一条语句,我想中断主循环,那我应该怎么做? 这是我的代码: 问题答案: 使用标记的中断: 另请参阅 Java代码中的“循环:”。 这是什么,为什么会编译? 文献资料

  • 问题内容: 我正在将Java项目从Ant迁移到Gradle。我认为最好的解决方案是使用Gradle的多项目支持,但是我找不到摆脱循环依赖的方法。 原始项目已设置为具有以下布局: 之间的关系,并且,是棘手的。将取决于或根据配置文件。同样,无论配置属性如何,都依赖和。并且永远不会在同一时间建造。 我认为一种快速的解决方案是在: 接下来,我想过要找到一种方法来使之更接近公正工作。这导致我想到了这一点:

  • 有时候你会遇到循环,或者递归函数,它们会花费很长的执行时间,可能是你的产品的瓶颈。在你尝试使循环变得快一点之前,花几分钟考虑是否有可能把它整个移除掉,有没有一个不同的算法?你可以在计算时做一些其他的事情吗?如果你不能找到一个方法去绕开它,你可以优化这个循环了。这是很简单的,move stuff out。最后,这不仅需要智慧而且需要理解每一种语句和表达式的开销。这里是一些建议: 删除浮点运算操作。

  • 问题内容: 因此,Scala应该和Java一样快。我正在重新研究最初在Java中解决的Scala Project Euler 问题。特别是问题5:“能被从1到20的所有数字均分的最小正数是多少?” 这是我的Java解决方案,需要0.7秒才能在计算机上完成: 这是我对Scala的“直接翻译”,需要103秒(长147倍!) 最后,这是我进行函数式编程的尝试,该过程需要39秒(长55倍) 在Window

  • 本文向大家介绍php foreach如何跳出两层循环(详解),包括了php foreach如何跳出两层循环(详解)的使用技巧和注意事项,需要的朋友参考一下 使用break可以跳出当前循环,那如果想再跳出上一层的循环呢 我们就需要break 2即可 以上这篇php foreach如何跳出两层循环(详解)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持呐喊教程。

  • 问题内容: 我正在编写代码以确定nxn列表中的每个元素是否相同。即返回true,但将返回false。我正在考虑编写一个代码,当它发现与第一个元素不同的元素时立即停止。即: 我想停止此循环, 然后返回false。否则返回true。我将如何实施呢? 问题答案: 使用和为此。可以使用以下命令在Python中完成打破嵌套循环的操作: 另一种方法是将所有内容包装在函数中,并用于从循环中退出。