首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何用Q来嵌套序列?

如何用Q来嵌套序列?
EN

Stack Overflow用户
提问于 2015-02-10 09:41:25
回答 1查看 56关注 0票数 2

我想处理一系列的任务,并得到通知,只要这些任务块完成,一旦每项任务完成。我期望的输出应该是1,2,3 - 4,5,6 - 7 - 8。使用我当前的实现,我得到了1,4,7,8 - 2,5 - 3,6

代码语言:javascript
运行
AI代码解释
复制
function handleTasks(tasks) {
    var deferred = Q();
    var promises = []

    tasks.forEach(function (task) {
        promises.push(function () {
            return handle(task);
        });
    });

    promises.reduce(Q.when, new Q()).then(function () {
        // Finished inner hunk.
        deferred.resolve();
    });

    return deferred.promise;
}

function handle(t) {
    var deferred = Q.defer();
    document.write("started " + t);

    Q.delay(5000).then(function () {
        document.write("finished " + t);
        deferred.resolve();
    });

    return deferred.promise;
}

var deferred = Q();
var tasks = [[1, 2, 3], [4, 5, 6], [7], [8]];
var promises = []

tasks.forEach(function (task) {
    promises.push(function () {
        return handleTasks(task);
    });
});

promises.reduce(Q.when, new Q()).then(function () {
    // Finished all tasks
    deferred.resolve();
});
代码语言:javascript
运行
AI代码解释
复制
<script src="http://cdnjs.cloudflare.com/ajax/libs/q.js/0.9.6/q.js"></script>

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-02-10 23:25:34

我真的不知道您的代码是如何产生任何输出的。您正在尝试使用一个承诺,就好像它们是延迟的,而您使用的是document.write(),我可以想象它正在覆盖您的整个页面。

虽然不一定是一个bug,但您使用的是deferred antipattern

因此,我不太清楚您为什么会得到这样的结果,但是这里有一种更干净的方法,可以产生所需的结果:

代码语言:javascript
运行
AI代码解释
复制
function handleTasks(tasks) {
    var promiseFuncs = tasks.map(function (task) {
        return function () {
            return handle(task);
        };
    });

    return promiseFuncs.reduce(Q.when, new Q()).then(function () {
        console.log("finished " + JSON.stringify(tasks));
    });
}

function handle(t) {
   console.log("started " + t);

    return Q.delay(5000).then(function () {
        console.log("finished " + t);
        return t;
    });
}

var tasks = [[1, 2, 3], [4, 5, 6], [7], [8]];
var promiseFuncs = tasks.map(function (task) {
    return function () {
        return handleTasks(task);
    };
});

promiseFuncs.reduce(Q.when, new Q());
代码语言:javascript
运行
AI代码解释
复制
<script src="http://cdnjs.cloudflare.com/ajax/libs/q.js/0.9.6/q.js"></script>

您还可以在这里使用帮助函数消除一些重复:

代码语言:javascript
运行
AI代码解释
复制
function runSequence(items, action) {
    return items.map(function (item) {
        return function () {
            return action(item);
        };
    }).reduce(Q.when, new Q());
}

function handleTasks(tasks) {
    return runSequence(tasks, handle).then(function () {
        console.log("finished " + JSON.stringify(tasks));
    });
}

function handle(t) {
   console.log("started " + t);

    return Q.delay(5000).then(function () {
        console.log("finished " + t);
        return t;
    });
}

var tasks = [[1, 2, 3], [4, 5, 6], [7], [8]];
runSequence(tasks, handleTasks);
代码语言:javascript
运行
AI代码解释
复制
<script src="http://cdnjs.cloudflare.com/ajax/libs/q.js/0.9.6/q.js"></script>

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28438261

复制
相关文章
python 解开嵌套的序列
def flatten(items, ignore_types=(str, bytes)): for x in items: if isinstance(x, Iterable) and not isinstance(x, ignore_types): yield from flatten(x) else: yield x
用户5760343
2019/09/29
5690
利用 goto 来防止 if 嵌套
流程控制中的 if 是比较简单的逻辑判断,但是在多条逻辑判断中很容易造成 if 嵌套,逻辑复杂度较高,让人感到十分混乱。
折影轻梦
2021/08/11
7080
Discuz! Q 1.0来了!
大家好,我是Discuz! Q。 作为中文PC互联网最知名的社区开源软件Discuz!,在过去15年间,服务过超过200万网站客户。其推出的UCenter、Supesite、ECshop等组件所代表的的产品理念对今天移动互联网各类产品的技术架构至今仍有着深远的影响,毫不夸张的说,Discuz!代表了互联网2.0时代里社交网络的最初形态。 近10年来,中文互联网发生了天翻地覆的变化,应用形态从PC迁移到了移动端,深刻的改变了人们获取信息的方式,与此同时,开源服务的技术形态业从私有化部署走向了以Saas为代表
腾讯云DNSPod团队
2020/07/17
1.7K1
如何用 AI 来鉴别假新闻
18年10月4日,麻省理工学院计算机科学与人工智能实验室(CSAIL)在其官网发布了一则新闻,宣称该实验室与卡塔尔计算研究所(Qatar Computing Research Institute)的研究人员合作,已经研究出一种可以鉴别信息来源准确性和个人政治偏见的AI系统,该研究成果将于本月底在比利时布鲁塞尔召开的2018自然语言处理经验方法会议(EMNLP)上正式公布。
AI算法修炼营
2021/06/17
8870
如何用Java来判断回文数?
public class palindrome { public static boolean isPalindrome(String str) { SqStackClass<Character> st = new SqStackClass(); //建立一个顺序栈 int n = str.length(); int i = 0; while (i < n / 2)
楠羽
2022/11/18
3730
如何用Loki来分析Kubernetes事件
在Kubernetes API的众多对象中,Events算是最容易被我们忽视的类型之一。与其他对象相比,Event的活动量很大,不太可能长时间存储在etcd中,默认情况下,Event留存时间也只有1小时。当我们使用kubectl describe获取一个对象时,可能因时间超限而无法获取它的历史事件,这对集群的使用者非常的不友好。除了能查看集群事件外,我们可能还有类似追踪一些特定的Warning事件(如Pod生命周期、副本集或worker节点状态)来进行相关告警的需求。那么在开启本期话题之前,我们先来理解下Kubernetes Events的结构,下述是官访问给出的几个重要字段解释
云原生小白
2021/05/13
2.4K0
如何用Loki来分析Kubernetes事件
如何用数据来提升系统质量
作者 | Ben Linders 译者 | 明知山 策划 | 丁晓昀 为了理解系统是如何被用户使用的,我们可以收集指标,并了解这些指标随时间变化的趋势。我们可以用获得的数据和洞见改进软件设计或测试模式,以此来提升系统的质量。 Craig Risi 在 2022 年敏捷测试日大会上谈到了如何使用数据来提升系统的质量。 Risi 说,专注每一个缺陷和导致缺陷的根源,并试图找到适当的缓解措施,这是不可能的。这些工作所需的时间资源往往是不可接受的。Risi 提到,可行的做法是对根源和问题进行分类,并进行持
深度学习与Python
2023/03/29
3050
如何用数据来提升系统质量
如何用myetherwallet 来玩智能合约
用myetherwallet之前,请先看看 https://zhuanlan.zhihu.com/p/36105871
爬虫
2018/07/25
6400
如何用myetherwallet 来玩智能合约
如何用split命令来拆分文件
split是一个类似于grep或tail的Unix命令行实用程序。它允许您将较大的文件分成几个较小的文件。
Zeng
2018/09/10
4.4K0
独家 | 如何用XGBoost做时间序列预测?
本文介绍了如何用XGBoost做时间序列预测,包括将时间序列转化为有监督学习的预测问题,使用前向验证来做模型评估,并给出了可操作的代码示例。
数据派THU
2020/09/04
4.4K0
LeetCode 364. 加权嵌套序列和 II(重复叠加)
给一个嵌套整数序列,请你返回每个数字在序列中的加权和,它们的权重由它们的深度决定。
Michael阿明
2021/02/19
4500
手机序列号到底有何用?
手机序列号是一个唯一的识别码,也称为IMEI号码。它可以用来识别一部手机的身份和所有权,防止盗窃和欺诈活动。此外,手机序列号也可以用于以下方面:
hide
2023/10/24
2.2K0
手机序列号到底有何用?
如何用大数据来优化定价决策
制定合适的价格很重要,再怎么夸大都不过分。价格提高1%意味着经营利润平均可以增长8.7%(当然,假设销量没有损失)。不过我们估计,在许多公司每年制定的成千上万个定价决策中,多达30%未能给出最合适的价格——这意味着收入大量流失。而且考虑到如今海量数据为公司提供了难得的机会,可以做出合理得多的定价决策,这种现状尤其令人不安。对那些能够井然有序地应对复杂的大数据的公司而言,这蕴含着巨大价值。 我们倒不是说制定合适的价格很容易:由于数字化促使多渠道越来越复杂,客户接触点的数量不断激增。不过,价位需要跟上来。由于许
小莹莹
2018/04/20
1.2K0
如何用大数据来优化定价决策
如何用女神的名字来画女神?
头几天在CSDN上逛博客时遇到一篇非常有趣的博文,大意是将照片的内容用汉字来替换,看后觉得不错,决定分享给大家,下面就一起来看看吧。
巴山学长
2020/02/17
8660
如何用女神的名字来画女神?
如何用深度学习来识别恶意软件
这是一个悲伤的故事,你可能经历过。 你又热又渴,看到桌子上有一瓶看起来像水的东西,来不及思考,揭开瓶盖喝了一大口。哦!漏!是油! 时间回到10秒前,我们重来一次。 这一次,额外的剧情是,你有一个看不惯的死敌和你一起住(这种情况在合租大军中很容易出现),他放了一瓶类似水的不明液体在桌上。 你又进来了,有累又热又渴,这一次你又端起来这瓶液体。这一次,你仔细分析了这种物质、形状和体积,你利用曾经的斗争经验再次判断,然后信心满满地做出了正确选择,完美地躲避了这场恶作剧——一瓶100%纯尿。 福音来了 如果我把这瓶看
BestSDK
2018/02/27
1.7K0
如何用深度学习来识别恶意软件
SMURF流程之q2-sidle(二)-- 序列重建
继续前面的文档学习,地址在这里啦!官方文档‎ SMURF 算法的核心是基于基于 kmer 的短区域重建到全长框架中。有两个步骤,首先是ASV在单个区域基于kmer进行比对,然后完整的序列集组装成重建的计数表。
用户1075469
2021/03/11
4500
SMURF流程之q2-sidle(二)-- 序列重建
如何用GET的方式来发送json数据
curl -XGET 'http://192.168.5.182:9200/ecommerce/product/_search' -d' > { > "query":{ > "match_all":{} > } > }'
算法之名
2019/08/20
3.5K0
SaaS的客户如何用客户成功来留住
来源/作者:李宽wideplum ---- 腾讯SaaS加速器 二期30席项目招募 报名方式 腾讯SaaS加速器,作为腾讯产业加速器的一个重要组成部分,旨在搭建腾讯与SaaS相关企业的桥梁,通过资本、技术、资源、商机等层面的扶持,从战略到场景落地全方位加速企业成长,助力产业转型升级。 二期招募正式开始,扫描 二维码 立刻报名 (或点击文末  “阅读原文”,直达报名入口) 详情介绍:寻找SaaS“潜力军”,腾讯SaaS加速器二期开启招募 今天编译一篇通俗易懂的文章,来介绍一下如何用客户成功来留住客
腾讯SaaS加速器
2020/08/25
5510
看我如何用Python来分析《斗破苍穹》
近期根据小说《斗破苍穹》改编的同名电视剧正在热映,本文对《斗破苍穹》进行文本分析,分为两部分,首先爬取豆瓣影评进行简单分析,随后对于原创小说文本中的人物进行详细分析,文章代码和数据在后台回复"斗破苍穹"可得。
sergiojune
2018/12/05
9510
点击加载更多

相似问题

无法弄清楚如何用q链接嵌套承诺

12

Hofstadters Q序列

16

如何用Marshmallow序列化嵌套字典?

10

Q promise nodejs序列

11

Angular $q嵌套承诺

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文