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);
  • 相关阅读:
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    xgqfrms™, xgqfrms® : xgqfrms's offical website of GitHub!
    Javascript事件机制
    DOM模型
    MVC与三层架构解析学习
    BOM基础
    Javascript对象
    Javascript关键字,条件语句,函数及函数相关知识
    单词首字母大写
    HTML5.1 新增的14项特性学习
  • 原文地址:https://www.cnblogs.com/zhoulixue/p/7473910.html
Copyright © 2011-2022 走看看