zoukankan      html  css  js  c++  java
  • js----解决异步之Generator && async

    Generator-------生成器函数,解决异步:

    复制代码
    generator函数使用:
    1、分段执行,可以暂停
    
    2、可以控制阶段和每个阶段的返回值
    3、可以知道是否执行到结尾

    generator和异步控制:

    利用关键字yield,可以把异步操作写在yield语句里面,
    每调用一次next方法,则执行一次yield语句
    如果有return,return完成之后就退出了生成器函数,后面如果还有yield操作,则不再执行

    所以,Generator函数的一个重要实际意义就是用来处理异步操作,改写回调函数。
    复制代码
    复制代码
    function* g() {
        var o = 1;
        yield o++;
        yield o++;
    }
    var gen = g();
    
    console.log(gen.next()); //  Object {value: 1, done: false}
    
    var xxx = g();
    
    console.log(gen.next()); // Object {value: 2, done: false}
    console.log(xxx.next()); // Object {value: 1, done: false}
    console.log(gen.next()); // Object {value: undefined, done: true}
    复制代码

    async和异步:-------------通过await解决异步

    复制代码
    用法:
    
    async 表示这是一个async函数,await只能用在这个函数里面。
    
    await 表示在这里等待异步操作返回结果,再继续执行。
    
    await 后一般是一个promise对象
    
    示例:async用于定义一个异步函数,该函数返回一个Promise。
    如果async函数返回的是一个同步的值,这个值将被包装成一个理解resolve的Promise,等同于return Promise.resolve(value)。
    
    await用于一个异步操作之前,表示要“等待”这个异步操作的返回值。await也可以用于一个同步的值。
    复制代码
    复制代码
    let timer = async function timer(){
        return new Promise((resolve,reject) => {
            setTimeout(() => {
                resolve('500');
            },500);
        });
    }
    timer().then(result => {
      console.log(result);  //500
    }).catch(err => {
        console.log(err.message);
    });

    ------------------------------------------------------------------------------------------------------- //返回一个同步的值 let sayHi = async function sayHi(){ let hi = await 'hello world'; return hi; //等同于return Promise.resolve(hi); } sayHi().then(result => { console.log(result);//hello word });
    复制代码
  • 相关阅读:
    数据仓库
    HiveSQL 数据定义语言(DDL)
    HiveSQL 数据操控、查询语言(DML、DQL)
    【ASP.NET Core】Blazor+MiniAPI完成文件下载
    MySQL的WAL(WriteAhead Logging)机制
    MySQL系列 | 索引数据结构大全
    眼见为实,看看MySQL中的隐藏列
    mysql的默认隔离级别:可重复读(Repeatable Read)
    缓存淘汰算法LRU算法
    Android设计模式系列(12)SDK源码之生成器模式(建造者模式)
  • 原文地址:https://www.cnblogs.com/SRH151219/p/10399863.html
Copyright © 2011-2022 走看看