zoukankan      html  css  js  c++  java
  • javascript实现异步的几种方法(二)

    四、Promises对象

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

    简单说,它的思想是,每一个异步任务返回一个Promise对象,该对象有一个then方法,允许指定回调函数。比如,f1的回调函数f2,可以写成:

    f1().then(f2);
    var f1 = new Promise(function(resolve,reject) {
        console.log('p1');
        resolve();
    })
    function f2(){
        console.log('f2');
    }
    // f1.then(function(value){
    //     console.log(value);
    // },function(error){
    //     console.log(error);
    // })
    f1.then(f2)

     五,Generator函数

    co 模块

    基本用法

    co 模块是著名程序员 TJ Holowaychuk 于2013年6月发布的一个小工具,用于 Generator 函数的自动执行。

    下面是一个 Generator 函数,用于依次读取两个文件。

    var gen = function* () {
      var f1 = yield readFile('/etc/fstab');
      var f2 = yield readFile('/etc/shells');
      console.log(f1.toString());
      console.log(f2.toString());
    };

    co 模块可以让你不用编写 Generator 函数的执行器。

    var co = require('co');
    co(gen);

    上面代码中,Generator 函数只要传入co函数,就会自动执行。

    co函数返回一个Promise对象,因此可以用then方法添加回调函数。

    co(gen).then(function (){
      console.log('Generator 函数执行完成');
    });

    上面代码中,等到 Generator 函数执行结束,就会输出一行提示。

    六、async函数

    var asyncReadFile = async function () {
      var f1 = await readFile('/etc/fstab');
      var f2 = await readFile('/etc/shells');
      console.log(f1.toString());
      console.log(f2.toString());
    };

    async函数返回一个 Promise 对象,可以使用then方法添加回调函数。当函数执行的时候,一旦遇到await就会先返回,等到异步操作完成,再接着执行函数体内后面的语句。

    function timeout(ms) {
      return new Promise((resolve) => {
        setTimeout(resolve, ms);
      });
    }
    
    async function asyncPrint(value, ms) {
      await timeout(ms);
      console.log(value);
    }
    
    asyncPrint('hello world', 50);
  • 相关阅读:
    阿里巴巴校招内推简历筛选方案
    SIFT中的尺度空间和传统图像金字塔
    boost的编译
    H264与RTP
    link2001错误无法解析外部符号metaObject
    windows 7下qtcreator里QWT文件的pro配置
    电脑键盘上你所不知道的秘密,学会了很牛气!
    http://blog.csdn.net/chenriwei2/article/details/38047119
    Seaborn中的kdeplot、rugplot、distplot与jointplot
    8-Pandas扩展之Pandas提升性能的方法(eval()、query())
  • 原文地址:https://www.cnblogs.com/zhoulixue/p/7473910.html
Copyright © 2011-2022 走看看