js----解决异步之Generator && async

时间:2019-02-19 11:22:49   收藏:0   阅读:182

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 });
技术分享图片

 

原文:https://www.cnblogs.com/SRH151219/p/10399863.html

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!