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 });
复制代码

 

posted @ 2019-02-19 11:16  SRH啦  阅读(454)  评论(0编辑  收藏  举报