q 笔记一:异步编程入门

作者: brandonxiang | 来源:发表于2016-05-26 15:31 被阅读267次

q 笔记一:异步编程入门

源码github地址在此,记得点星:
https://github.com/brandonxiang/example-q

前言

大家都知道javascript的优点在于异步非阻塞。Javascript异步编程的4种方法指出javascript的单线程的特性和同步(Synchronous)异步(Asynchronous)的执行模式,并且说明了四种异步的方法,如今最重要的当然是Promises对象

Promises对象是CommonJS工作组提出的一种规范,目的是为异步编程提供统一接口

异步编程有着一个很大的效率优势,但是异步多了就成为金字塔型的代码结构非常不好阅读,而且异步和同步的控制变得非常非常困难。

$.getJSON('./api', function(data){
    console.log(data);
    $.getJSON('./api', function(data){
        console.log(data);
    }
})

这时候,我们需要Promise模式。这种模式其实在ES6已经得到官配,参考Javascript 中的神器——Promise。但是有些人还停留在ES5的开发,没接触node.js这时候,我们需要运用一些第三方库来控制异步的流程。

Promise在ES5实现

q的详细说明

其他几个资源库都应该大同小异,留给你们私下研究。

串行

then作为一个关键字,将函数async('first')async('second')async('third')async('fourth')的顺序分开,整体呈现完成第一个函数再完成第二个函数的序列操作。

async('first').then(function (resp) {
      console.log(resp);
      return async('second');
}).then(function (resp) {
     console.log(resp);
     return async('third')
}).then(function (resp) {
     console.log(resp);
     return async('fourth');
}).then(function (resp) {
     console.log(resp);
});

并行

并行要把对应的函数(async('a')async('b')async('c'))事先装备在数组当中。用Q.all()对它们进行并行处理,也就是说这几个函数将同时处理。

var promises = [];
promises.push(async('a'));
promises.push(async('b'));
promises.push(async('c'));
Q.all(promises);

串并行混连

无论是先串后并,还是先并后串都可以。在并行程序Q.all(promises)后,加入then关键字,实现串并行混连,非常适合在拉取数据后对所有数据进行操作。

Q.all(promises).then(function(){
   console.log('hello world');
})

总结

最终,这笔记写的像是物理电路一样,引用q官方文档的一段代码。

以前异步编程的代码是这样的。

step1(function (value1) {
    step2(value1, function(value2) {
        step3(value2, function(value3) {
            step4(value3, function(value4) {
                // Do something with value4
            });
        });
    });
});

现在异步编程的代码是这样的。

Q.fcall(promisedStep1)
.then(promisedStep2)
.then(promisedStep3)
.then(promisedStep4)
.then(function (value4) {
    // Do something with value4
})
.catch(function (error) {
    // Handle any error from all above steps
})
.done();

转载,请表明出处。总目录前端经验收集器

相关文章

  • q 笔记一:异步编程入门

    q 笔记一:异步编程入门 源码github地址在此,记得点星:https://github.com/brandon...

  • Angular $q

    $q采用的是promise式的异步编程.什么是promise异步编程呢?异步编程最重要的核心就是回调,因为有回调函...

  • 关于C#异步编程你应该了解的几点建议

    前段时间写了一篇关于C#异步编程入门的文章,你可以点击《C#异步编程入门看这篇就够了》查看。这篇文章我们来讨论下关...

  • 再次学习 C# 异步,从老板吃薯条说起

    本文主要介绍了在 C# 中使用 Async 和 Await 关键字进行异步编程的心得,是入门级的学习笔记。 题解:...

  • 异步编程入门

    本文部分翻译自krondo的In Which We Begin at the Beginning 编程模型 在介绍...

  • Python 异步IO - asyncio

    python 异步IO 本文为个人学习python asyncio模块的内容,可以看为python异步编程的入门。...

  • Asyncjs

    javaScript异步编程 笔记 Recommand: CodeSchool JQuery MDN for Qu...

  • .Net Core WebAPI 基于Task的同步&异

    .Net Core WebAPI 基于Task的同步&异步编程快速入门Task.Resultasync & awa...

  • Promise讲解

    一、定义 Promise 是异步编程[https://so.csdn.net/so/search?q=%E5%BC...

  • sql 入门经典

    注释和标注:《SQL入门经典(第5版)(异步图书) (计算机编程入门经典系列 31)》作者:Ryan Stephe...

网友评论

    本文标题:q 笔记一:异步编程入门

    本文链接:https://www.haomeiwen.com/subject/pdqxdttx.html