generator和promise和async的异同

一、generator(生成器)是ES6标准引入的新数据类型,他和promise一样都是异步事件的解决方案

		//generator函数生成斐波那契
        // generator(生成器)是ES6标准引入的新数据类型,async就是 Generator 函数的语法糖
        //本质:用来处理异步事件的对象/包含异步操作的容器
        function* fib(num){
            console.log(this);  //window,赋值给f之后,执行相当于window.f.next()
            let n=0
            let a=0
            let b=1
            while(n<num){
                // yield后面一定要加分号,不然会接收后面的一切
                yield a;
                // 解构赋值交换变量,无需中间值
                [a,b]=[b,a+b]
                n++
            }
            return
        }
        console.log(Object.prototype.toString.call(fib));
        //[object GeneratorFunction],但是js无法直接读取Generator构造函数
        let f=fib(5)
        console.log(f);	//结果看图示
        console.log(f.next());

console.log(f)的结果,是一个Generator实例
generator和promise和async的异同_第1张图片

二、Promise

本质:用来处理异步事件的对象/包含异步操作的容器
作用:promise可以将异步操作以同步操作的流程表达出来,避免了层层嵌套的回调函数。
缺点:
1.无法取消promise,一旦新建就会立即执行,无法中途取消。
2.而且如果不设置回调函数,promise抛出的错不会反应到外部
3.当处于Pending状态时,无法得知目前进展到哪一个阶段(刚刚开始还是即将完成)。
4.Promise 真正执行回调的时候,定义 Promise 那部分实际上已经走完了,所以 Promise 的报错堆栈上下文不太友好。

三、async为什么比promise更好

简单概况promise和async的优缺点就是:使用async函数可以让代码简洁很多,不需要像Promise一样需要些then,
不需要写匿名函数处理Promise的resolve值,也不需要定义多余的data变量,还避免了嵌套代码。错误处理:Async/Await
让 try/catch 可以同时处理同步和异步错误。

四、async为什么比generator更好

async为什么比generator更好
1.内置执行器。
2.更好的语义
3.返回值是 Promise
4.更广的适用性

五、异步请求的解决方式有以下六种方式

异步请求的解决方式有以下六种方式
①回调函数:实现简单、易于理解。但不利于后面的维护等,不可用 try-catch 去捕获错误,也不可以直接 return 出来。
②事件监听:易于理解,可同时指定多个回调函数,利于模块化。但是很难看出主流程是到底是哪一个。
事件,promise,generator,async和await。
③发布订阅:与事件监听类似,但是相对比事件监听好些。因为可以通过“发布者”,有多少订阅者,从而监控程序的运行。
④Promise:一般用于网络请求、读取本地文件等较长时间的操作,可通过then/catch/finally等链式调用,解决回调地狱问题。但是也有以上说的四点缺点。
⑤Generators/ yield:语法行为与传统函数完全不同,强在可以控制函数的执行。比较抽象难懂。
⑥async/await:async返回的一般是 promise实例对象,await后面跟的可以是表达式/请求。且通俗易懂。

你可能感兴趣的:(进阶前端攻城狮,javascript,前端,promise)