精华内容
下载资源
问答
  • 前端异步流程

    千次阅读 2019-06-12 11:18:09
    前端的异步流程 ( 很重要 ) 传统的原生异步 回调函数 事件 使用异步流程工具( 别人封装好的东西 ) es6 Promise Promise 是异步编程的一种解决方案,比传统的解决方案–回调函数和事件--更合理和更强大...

    前端的异步流程 ( 很重要 )

    1. 传统的原生异步
      • 回调函数
      • 事件
    2. 使用异步流程工具( 别人封装好的东西 )
      • es6 Promise
        Promise 是异步编程的一种解决方案,比传统的解决方案–回调函数和事件--更合理和更强大。它由社区最早提出和实现,ES6将其写进了语言标准,统一了语法,原生提供了Promise
      
        所谓Promise ,简单说就是一个容器,里面保存着某个未来才回结束的事件(通常是一个异步操作)的结果。从语法上说,Promise是一个对象,从它可以获取异步操作的消息。 
        Promise 对象的状态不受外界影响
      
        三种状态:
      
        pending:进行中
        fulfilled :已经成功
        rejected 已经失败
        状态改变: 
        Promise对象的状态改变,只有两种可能:
      
        从pending变为fulfilled
        从pending变为rejected。
        这两种情况只要发生,状态就凝固了,不会再变了,这时就称为resolved(已定型)
      
      • es6 generator函数
      • es6( 7 ) async 函数
      • node.js中的 nextTick setImmudiate
        nextTick()的回调函数执行的优先级要高于setImmediate();
      
        process.nextTick()属于idle观察者,setImmediate()属于check观察者.在每一轮循环检查中,idle观察者先于I/O观察者,I/O观察者先于check观察者.
      
        在具体实现上,process.nextTick()的回调函数保存在一个数组中,
        setImmediate()的结果则是保存在链表中.
        在行为上,process.nextTick()在每轮循环中会将数组中的回调函数全部执行完.
        而setImmediate()在每轮循环中执行链表中的一个回调函数.
      
      
        nextTick > 回调函数 > setImmediate
      
      • 第三方的 async.js 库

    总结:
    异步流程的任务是放在异步队列中的,异步队列只有在主线程执行完之后采取执行
    3. 参考资料

    1. Promise
      https://blog.csdn.net/MrJavaweb/article/details/79475949

    2. Generator
      https://www.cnblogs.com/imwtr/p/5913294.html

    3. Async-await

    4. Node.js 中的nextTick()和setimmediate()
      https://www.cnblogs.com/5ishare/p/5268273.html

    5. async库
      https://caolan.github.io/async/

    参考文档
    Event-loop
    http://www.ruanyifeng.com/blog/2014/10/event-loop.html?bsh_bid=983729729
    史上最易读懂的 Promise/A+ 完全实现
    https://zhuanlan.zhihu.com/p/21834559

    展开全文
  • PLM,PDM,Teamcenter10,Workflow新功能异步流程处理参考,Teamcenter后台执行配置参考
  • 主要介绍了Nodejs异步流程框架async的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 主要介绍了微信小程序中使用Promise进行异步流程处理的实例详解的相关资料,这里详细说明该如何使用Promise 来进行异步流程的处理,提供具体实现步骤,需要的朋友可以参考下
  • 前端的异步流程

    千次阅读 2019-06-12 11:39:43
    前端的异步流程 传统的原生异步 回调函数 事件 使用异步流程工具( 别人封装好的东西 ) es6 Promise Promise 是异步编程的一种解决方案,比传统的解决方案–回调函数和事件--更合理和更强大。它由社区最早...

    前端的异步流程

    1. 传统的原生异步
      • 回调函数
      • 事件
    2. 使用异步流程工具( 别人封装好的东西 )
      • es6 Promise
        Promise 是异步编程的一种解决方案,比传统的解决方案–回调函数和事件--更合理和更强大。它由社区最早提出和实现,ES6将其写进了语言标准,统一了语法,原生提供了Promise
      
        所谓Promise ,简单说就是一个容器,里面保存着某个未来才回结束的事件(通常是一个异步操作)的结果。从语法上说,Promise是一个对象,从它可以获取异步操作的消息。 
        Promise 对象的状态不受外界影响
      
      

    三种状态:

      pending:进行中
      fulfilled :已经成功
      rejected 已经失败
      状态改变: 
      Promise对象的状态改变,只有两种可能:
    
      从pending变为fulfilled
      从pending变为rejected。
      这两种情况只要发生,状态就凝固了,不会再变了,这时就称为resolved(已定型)
    
    • es6 generator函数
    • es6( 7 ) async 函数
    • node.js中的 nextTick setImmudiate
    ```javascript
      nextTick()的回调函数执行的优先级要高于setImmediate();
    
      process.nextTick()属于idle观察者,setImmediate()属于check观察者.在每一轮循环检查中,idle观察者先于I/O观察者,I/O观察者先于check观察者.
    
      在具体实现上,process.nextTick()的回调函数保存在一个数组中,
      setImmediate()的结果则是保存在链表中.
      在行为上,process.nextTick()在每轮循环中会将数组中的回调函数全部执行完.
      而setImmediate()在每轮循环中执行链表中的一个回调函数.
      nextTick > 回调函数 > setImmediate
    ```
    
    • 第三方的 async.js 库

    总结:
    异步流程的任务是放在异步队列中的,异步队列只有在主线程执行完之后采取执行
    3. 参考资料

    1. Promise
      https://blog.csdn.net/MrJavaweb/article/details/79475949

    2. Generator
      https://www.cnblogs.com/imwtr/p/5913294.html

    3. Async-await

    4. Node.js 中的nextTick()和setimmediate()
      https://www.cnblogs.com/5ishare/p/5268273.html

    5. async库
      https://caolan.github.io/async/

    参考文档
    Event-loop
    http://www.ruanyifeng.com/blog/2014/10/event-loop.html?bsh_bid=983729729
    史上最易读懂的 Promise/A+ 完全实现
    https://zhuanlan.zhihu.com/p/21834559

    展开全文
  • 主要给大家介绍了关于Javascript异步流程控制之串行执行的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • co是一个基于ES6 Generator特性实现的【异步流程同步化】写法的工具库。 co需要使用Promise特性,所以,我们先来创建一个使用Promise来处理的异步方法: function myAsyncFunc() { return new Promise(function ...
  • 本文主要介绍的是关于微信小程序利用co处理异步流程的方法教程,分享出来供大家参考学习,需要的朋友们下面来看看详细的介绍: co co是一个基于ES6 Generator特性实现的【异步流程同步化】写法的工具库。 co需要使用...
  • 异步流程控制async

    千次阅读 2017-07-31 22:04:16
    node中所有的操作都是异步的,有时一个函数需要上一个函数的返回值做参数,这样下来一不小心就会陷入回调地狱的陷阱中,所以学会使用异步流程控制非常重要。 - 串行无关联 多个函数或方法要依次执行,但是他们...

    node中所有的操作都是异步的,有时一个函数需要上一个函数的返回值做参数,这样下来一不小心就会陷入回调地狱的陷阱中,所以学会使用异步流程控制非常重要。

    • 串行无关联
      多个函数或方法要依次执行,但是他们之间并没有什么联系,只有先后的顺序,比如我要写一个文件,写完之后像用户发送邮件,这两者之间没有必然的联系,但是发邮件必须在写文件完成之后。
    
    var async = require('async');
    
    async.series({
        one: function(callback) {//回调函数callback做为参数传进来,one函数执行完毕后执行callback,并且只有callback执行了流程才会往下走否则two函数不执行
             var num = 0;
            setInterval(function(){
                num++;
                console.log('函数one:'+num);
                if(num==5){
                    clearInterval(this);
                     console.log('函数one执行完毕'+'\n');
                     callback(null, 'one');
                }
            },1000)
           
           
        },
        two: function(callback) {
             var num = 0;
            setInterval(function(){
                num++;
                console.log('函数two:'+num);
                if(num==5){
                    clearInterval(this);
                     console.log('函数two执行完毕'+'\n');
                     callback(null, 'two');
                }
            },1000)
           
    
        },
    }, function(error, result) { //所有步骤执行完毕后的回调函数
       
        // console.log('error: ' + error);
        console.log(result);//保存一个各步程序信息的结果集
        
    });
    运行结果:
    函数one:1
    函数one:2
    函数one:3
    函数one:4
    函数one:5
    函数one执行完毕
    
    函数two:1
    函数two:2
    函数two:3
    函数two:4
    函数two:5
    函数two执行完毕
    
    { one: 'one', two: 'two' }
    
    
    这里写代码片
    
    • 并行无关联
      多个函数执行,之间没有任何的关系,也就是说谁执行都行,为了节约时间就可以使用并行流程来解决,各函数的运行结果相互之间不影响,谁先跑完谁后跑完都没有关系。
    
    var async = require('async');
    
    async.parallel({
        one: function(callback) {//回调函数callback做为参数传进来,one函数执行完毕后执行callback,并且只有callback执行了流程才会往下走否则two函数不执行
             var num = 0;
            setInterval(function(){
                num++;
                console.log('函数one:'+num);
                if(num==5){
                    clearInterval(this);
                     console.log('函数one执行完毕'+'\n');
                     callback(null, 'one');//把每一步的运行结果通过callback传到总的结果集中
                }
            },1000)
           
           
        },
        two: function(callback) {
             var num = 0;
            setInterval(function(){
                num++;
                console.log('函数two:'+num);
                if(num==5){
                    clearInterval(this);
                     console.log('函数two执行完毕'+'\n');
                     callback(null, 'two');
                }
            },1000)
           
    
        },
    }, function(error, result) { //所有步骤执行完毕后的回调函数
       
        // console.log('error: ' + error);
        console.log(result);//保存一个各步程序信息的结果集
        
    });
    运行结果:
    函数one:1
    函数two:1
    函数one:2
    函数two:2
    函数one:3
    函数two:3
    函数one:4
    函数two:4
    函数one:5
    函数one执行完毕
    
    函数two:5
    函数two执行完毕
    
    { one: 'one', two: 'two' }
    
    • 串行有关联
      多个函数或方法执行,每一步执行时都需要上一步执行的结果当参数,所以就会有串行等待。会以传参的方式使各函数之间建立联系。
    
    var async = require('async');
    
    async.waterfall([//串行有关联是以数组的方式进行的用的是中括号而串行无关联是以对象的方式进行
        function(callback) {//回调函数callback做为参数传进来,one函数执行完毕后执行callback
             var num = 0;
            setInterval(function(){
                num++;
                console.log('函数one:'+num);
                if(num==5){
                    clearInterval(this);
                     console.log('函数one执行完毕'+'\n');
                     callback(null, 'one');//上一步的运行结果通过callback传到下一步的函数中,逐级递传,不同于串行无关联把每一步的结果全部直接传到总的回调函数中
                }
            },1000)
           
           
        },
        function(prevalue,callback) {
             var num = 0;
            setInterval(function(){
                num++;
                console.log('函数two:'+num);
                if(num==5){
                    clearInterval(this);
                     console.log('函数two执行完毕'+'\n');
                     callback(null, prevalue+',two0');
                }
            },1000)
           
    
        },
    ], function(error, result) { //所有步骤执行完毕后的回调函数
       
        // console.log('error: ' + error);
        console.log(result);//保存一个各步程序信息的结果集
        
    });
    运行结果:
    函数one:1
    函数one:2
    函数one:3
    函数one:4
    函数one:5
    函数one执行完毕
    
    函数two:1
    函数two:2
    函数two:3
    函数two:4
    函数two:5
    函数two执行完毕
    
    one,two0
    
    
    展开全文
  • 主要介绍了promise和co搭配生成器函数方式解决js代码异步流程的比较,在es6中引入的原生Promise为js的异步回调问题带来了一个新的解决方式co模块搭配Generator函数的同步写法,更是将js的异步回调带了更优雅的写法。...
  • Defer 异步流程控制 实现 用法 var promise = function(){ var deferred = new Defer; setTimeout(function(){ var rand = Math.random() > .5; if(rand){ deferred.resolve('ok'); }else{ deferred.reject('...
  • 了解如何创建新流程以及如何有效地对其进行管理。
  • StuQ分享专题《深入浅出js(Node.js)异步流程控制》完整版
  • 我们知道,JavaScript是单进程...这些异步的代码不会阻塞当前的界面主进程,界面还是可以灵活的进行操作,等到异步代码执行完成,再做相应的处理。 一段典型的异步代码类似这样: function asyncFunc(callback) {  set
  • 第一个面向开发人员的翻译工具译员与您的团队之间真正的异步流程。 •• Accent提供了围绕Web /本地应用程序维护翻译的强大功能抽象。 历史。 完整的历史记录控制和操作回滚。 谁做了什么的时候。 用户界面。 ...
  • 完美结合的异步流程控制库! 能用简单优美的方式将任何同步或异步回调函数转换成then()链式调用! 你可以在服务器端(node.js)或浏览器中使用then.js,兼容ie6/7/8。 特征 可以像标准的 Promise 那样,把N多异步回调...
  • NULL 博文链接:https://schifred.iteye.com/blog/2318936
  • Node.js系列--异步流程控制

    千次阅读 2015-01-12 11:35:07
    异步编程是Node.js中最大的特点,在Node.js的编程实践中我们为了...现在我们来认识一下Node.js的异步流程控制。 一、 callback 在Node.js中,无论是自定义API还是原生方法到处都可以看到callback的身影,说道callback就

    <span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">	</span><span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">异步编程是Node.js中最大的特点,在Node.js的编程实践中我们为了使得其发挥特性,将所有的东西都写成异步方式,特别是异步回调方式。在Node.js原生代码中,只有fs模块即提供了同步版本又提供了异步版本。现在我们来认识一下Node.js的异步流程控制。</span>

    一、 callback

    在Node.js中,无论是自定义API还是原生方法到处都可以看到callback的身影,说道callback就要说说Node.js的异步编程机制了,Node.js是一个底层由C++扩展的javascript运行时环境,它使得javascript可以在浏览器沙箱之外运行。由于javascript大多数时候(被熟知的)是运行在浏览器里面,用于提升页面交互性,制作特效等的脚本语言,本身不具备太多操作文件,操作系统资源的能力,这些都是通过C++扩展的,并且用google鼎鼎大名的V8引擎来执行javascript代码。javascript程序在执行的时候是单线程的,就是一段代码无法被分割到多个线程执行,然后在对结果进行归一处理。但是在浏览器中整个javascript的runtime不是单线程的,因为浏览器能够通过创建多线程执行多个javascript程序,比如ajax,在浏览器中ajax并不会阻塞当前的页面的其它javascript代码的执行,因为两者是独立运行的,服务器返回结果再由浏览器通过ajax对象将数据导入javascript的runtime当中。在javascript中异步编程,即在执行某个处理函数的时候,并没有等待执行结果,而是任务调度器将程序的控制权交给了其它处理逻辑,当之前的处理完成后再将程序的控制权交还给那个逻辑,这样就有了javascript中的“当....则...."这样的异步回调逻辑。

    //浏览器总ajax异步回调的例子
    //1. ajax请求/hello
    //2. 当请求得到响应则输出结果
    $.get('/hello', function(data){
         console.log(data)
    })
    
    </pre><pre name="code" class="javascript">//node.js中异步回调的例子
    var fs = require('fs');
    fs.readFile('hello.txt', function(error, text){
        if(error) throw error;
        console.log(text);
    })


    上面的示例就是典型的异步回调的例子,我们用匿名的function函数作为callback参数


    // 自定义函数

    functiton myReadFile(file, enc, callback){
        fs.readFile(file, enc, function(error, data){

           if(error){

           return callback(error);

           }
    return callback(null, data); 

       })
    }


    上面的例子是我们自己定义的函数,同样 的在调用的时候也是一样的要传入callback参数,接收函数的处理结果。
            

    二、async

    这里的async只是列举了一个例子,他并不是一种编程范式,而是一个工具集合,它同样使用的是callback方式,但是它能让我们的程序的流程更加的清晰,可控制。这个是主要的,特别是很好的解决了异步回调的深层嵌套问题, 它提供了很多的方法,包括对map的处理。在编写Node.js程序时所要用到的流程控制几乎都已经涉及到了,这里简单的举个例子,更多的可以查看npm网站async文档。

    var async = require('async')

    async.map(fileList, function(file, callback){
        var stream = fs.createReadStream(file.filePath);
        (oss.ossClient).putObject({
            bucket: bucket,
            object: file.objectPath,
            srcFile: stream,
            contentType:file.contentType,
            contentLength: file.length
        }, function (uploadOssError, result) {
            //上传执行完成无论成功与否均需删除本地文件
            fs.unlink(file.filePath, function(unLinkError1){
                if (unLinkError1){
                    console.log('传输完成,文件删除失败');
                }
                if(uploadOssError || result.statusCode !== 200){
                    //console.log('文件上传至oss失败');
                    console.log(uploadOssError.message);
                    return callback(uploadOssError || new Error('upload file to oss fail.'));
                }
            });
            //传输完成的文件需要删除
            return callback(null);
        });
    },function(error){
        if(error){
            return next(error);
        }
        req.oss = ossPath;
        //需要将上传的信息传到下一个中间件
        return next(null);
    });

    三、promise

    promise 是避免callback的编程实践, 但是它所带来的不仅仅是避免callback,以及callback造成的嵌套过深的问题,更多的是为了解决Node.js或者说是javascript异步编程中的代码可靠性问题,因为深层嵌套只是一个表面的问题。其深层是所隐含的问题是代码缺乏可控性和可靠性。

            promise也是本文要着重讲的内容。Promise A+ 规范: https://promisesaplus.com/ 

            关于promise的实现,各不相同,但是按照Promise 规范实现的就是Promise, 关于Promise的感念,原理大概是这样的:

            某一个处理都是一个promise, 这个任务有pending(表示正在发生), fulfilled(表示已经履行),rejected(表示被拒绝)三种状态,这个任务的执行将对其状态产生影响,其状态也会相应的发生改变。但是最终状态必然是fulfilled或者rejected二者之一。fulfilled表示成功,rejected表示失败。而且任务的状态不可能从fulfilled变成rejected或者pending, 也不可能从rejectd变成fulfilled或者pending。这就保证了逻辑处理的可靠性。从变成形式来看。不同的状态对应着不同的处理函数。对错误的处理也比较统一,具备一致性。下面具体讲一下在编程中的使用。

    1. Promise是一个对象,包含了其状态,以及相应状态的处理方法。

    2. 使用then方法并接收两个参数(fulfilled, rejected)对应着逻辑处理结果

    3. then返回一个新的Promise对象。

    4. then的返回是新的Promise对象,所以形成一个Promise链,从而可以进行链式操作。

    Promise规范中定义的东西差不多就是这些,但是可以在此基础上对编程过程中常见的一些使用场景进行扩展,包括了对不同逻辑的支持,特别是并行任务,上下关联任务等等。在Node.js的Promise系列0模块中,比较知名的就是Q,是一个标准的Promise实现。还提供了很多比较有用的方法。下一篇我们就来详细讲解一下这个模块,以及所提供的方法及其用法。

     

    展开全文
  • AJAX同步或异步流程

    2015-05-16 15:30:32
    详细介绍了AJAX的通信过程 同步或者异步 值得一看
  • Javascript异步流程控制之Promise(1)-Angular $q简介原文写于 2015-01-25 https://github.com/kuitos/kuitos.github.io/issues/15先来说说什么是Promise吧 Promise是抽象异步处理对象以及对其进行各种操作的组件。...
  • Future Process 是面向对象的proc_open ,具有异步 API 和命令自动排队。 用法 // we use Shell to start new processes $ shell = new \ FutureProcess \ Shell ; // run a maximum of 5 concurrent processes - ...
  • nodejs异步流程控制co 模块

    万次阅读 2017-05-12 14:11:09
    对前端工程师来说,异步回调是再熟悉不过了,浏览器中的各种交互逻辑都是通过事件回调实现的,前端逻辑越来越复杂,导致回调函数越来越多,同时 nodejs 的流行也让 javascript 在后端的复杂场景中得到应用,在 ...
  • Bpel异步流程的构建与关联集

    千次阅读 2007-07-09 17:53:00
    Bpel异步流程的构建与关联集 在流程的整合的实际应用中,常常会出现流程的异步运行。例如:流程运行某处,阻塞,等待伙伴系统传来的信息,流程继续运行。可以使用receive活动或者pick活动来完成这中情况: 异步...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 249,438
精华内容 99,775
关键字:

异步流程