疑问,这一系列的异步操作如何做同步化改造?有这个必要吗?

在p204有下面这个例子,当然,书中并没有给出step1...step4的实现,这个实现是我加的。

  1. function step1(func){
  2. process.nextTick(function(){
  3. console.log(‘step1‘);
  4. func(1);
  5. });
  6. }
  7. function step2(val, func){
  8. process.nextTick(function(){
  9. console.log(‘step2,‘ + val);
  10. func(val+1);
  11. });
  12. }
  13. function step3(val, func){
  14. process.nextTick(function(){
  15. console.log(‘step3,‘ + val);
  16. func(val+1);
  17. });
  18. }
  19. function step4(val, func){
  20. process.nextTick(function(){
  21. console.log(‘step4,‘ + val);
  22. func(val+1);
  23. });
  24. }
  25. step1(function(val1){
  26. step2(val1, function(val2){
  27. step3(val2, function(val3){
  28. step4(val3, function(val4){
  29. console.log(‘val4, ‘, val4);
  30. })
  31. })
  32. })
  33. })

我想既然这些函数要接受一个回到函数,肯定是因为内部有一些操作是异步的,比如这个nextTick,或者是ajax调用,等等。

我现在不明白的是,作者在205中假定了step1...step4已经进行了同步化改造。然后再用generator函数来调用这些函数,那么究竟改造之后的step1...step4函数是什么样的呢?他如何把其中的异步操作变成同步的呢?

而且有必要变成同步的吗?JavaScript的美妙不就是因为他可以大量的使用异步吗?我觉得promise的语法挺优美的啊,为啥要进行generator的同步化改造呢?

时间: 2024-10-14 08:27:39

疑问,这一系列的异步操作如何做同步化改造?有这个必要吗?的相关文章

轻松无痛实现异步操作串行

提起异步操作的序列执行,指的是有一系列的异步操作(比如网络请求)的执行有前后的依赖关系,前一个请求执行完毕后,才能执行下一个请求. 异步操作的定义 我们定义一般异步操作都是如下形式: 1 2 3 4 5 func asyncOperation(complete : ()-> Void){ //..do something complete() } 常规的异步操作都会接受一个闭包作为参数,用于操作执行完毕后的回调. 那异步操作的序列化会有什么问题呢? 看如下的伪代码: 1 2 3 4 5 6 7

当我们谈论企业级存储市场时,我们谈论(做)了什么

摘要: APSARA Block Storage是阿里云弹性计算块存储团队推出的一款企业级分布式块存储产品,为企业级市场头部客户量身打造,构建高性能.弹性.可靠的大规模横向扩展云存储服务平台.可对接多种类型的计算平台,包括阿里云ECS.ZStack.OpenStack.Kubernetes以及物理服务器等不同类型,帮助客户轻松应对云时代下海量存储资源的敏捷存取需求,适用于政府.金融.运营商和大型制造企业的线下数据中心云存储业务场景. 一. 什么是APSARA Block Storage APSA

ES6语法(3)—— 用promise()对象优雅的解决异步操作

Promise 是异步编程的一种解决方案,比传统的解决方案--回调函数和事件--更合理和更强大. 所谓Promise,简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果.从语法上说,Promise 是一个对象,从它可以获取异步操作的消息.Promise 提供统一的 API,各种异步操作都可以用同样的方法进行处理. 上面两段话是阮大神对于promise对象的一些总结,我再浓缩一下   Promise就是用于处理异步操作的!   关于异步操作和同步操作的区别以及他们在浏

ES6中的迭代器(Iterator)和生成器(Generator)

前面的话 用循环语句迭代数据时,必须要初始化一个变量来记录每一次迭代在数据集合中的位置,而在许多编程语言中,已经开始通过程序化的方式用迭代器对象返回迭代过程中集合的每一个元素 迭代器的使用可以极大地简化数据操作,于是ES6也向JS中添加了这个迭代器特性.新的数组方法和新的集合类型(如Set集合与Map集合)都依赖迭代器的实现,这个新特性对于高效的数据处理而言是不可或缺的,在语言的其他特性中也都有迭代器的身影:新的for-of循环.展开运算符(...),甚至连异步编程都可以使用迭代器 本文将详细介

Angular 2.0 从0到1 (四)

第一节:Angular 2.0 从0到1 (一)第二节:Angular 2.0 从0到1 (二)第三节:Angular 2.0 从0到1 (三)第四节:Angular 2.0 从0到1 (四)第五节:Angular 2.0 从0到1 (五)第六节:Angular 2.0 从0到1 (六)第七节:Angular 2.0 从0到1 (七)第八节:Angular 2.0 从0到1 (八) 番外:Angular 2.0 从0到1 Rx-隐藏在Angular 2.x中利剑番外:Angular 2.0 从0

cs硕士妹子找工作经历【阿里人搜等互联网】

摘自  北邮人论坛  分享他人成功的求职经历.原文如下: 唉,妹子本来是本着写面经的态度与大家分享,之自己情况也是想说明一啥都不会的菜鸟在悲催的逆境下也可以凭自身努力找到offer,没想到被评为作秀...妹子能力背景确实和说的一样,但是从9月开始不是天天熬夜看了一个多月的书吗?菜鸟也可以拼命锻炼翅膀的... 妹子还是把背景舍去,只写面经吧   妹子是cs土著一枚,折腾了半年找工作,现在貌似也是尘埃落定了,手里还有2个offer待定,还在纠结中. 妹子开始找工作时间挺晚,是9月7号左右,之前完全没

<转> 纸牌屋1-4集分析

原文:http://blog.sina.com.cn/s/blog_b86c61490102v56t.html 第一季第一集 主人公弗兰克的出场,是以对待一只邻家将死之狗的态度展开的,充分显示了主人公的做事作风立场:(以小喻大)残忍,果断,决绝,对无用之物毫不怜悯,正是一个深通权谋的政客(不是政治家)应具有的品格.此时也出现了第一次弗兰克的镜头旁白,全剧多处充斥着主人公的镜头旁白,多为了解释弗兰克的性格作风等等,以及向不懂权谋术的观众解释权谋术的应用. 今夜弗兰克心情大好,亲呢地为妻子拉衣链赞美

北上深金融业2

胡润新金融50强发布 北上深杭承包了44家 2017年01月08日 12:06:58 来源: 胡润研究院 记者 袁华明 浙江在线1月8日讯 1月8日上午10点,胡润研究院联合相关单位发布<2017胡润中国新金融50强>及<2017胡润中国最具影响力财经自媒体50强>.这是胡润百富连续第二年发布面向新金融领域的排行榜.和去年相比,今年的评选范围从12大细分领域拓展到15大细分领域,覆盖的范围更广:其次对每个细分领域能够入选最终榜单的企业都作了严格审查,例如网贷行业上榜企业从去年的15

同步方法和同步块

在之前例子的基础上,我们增加新的功能:根据正确与不正确的响应来显示玩家的分数. public class ScoreLabel extends JLabel implements CharacterListener { private volatile int score = 0; private int char2type = -1; private CharacterSource generator = null, typist = null; public ScoreLabel(Chara