美文网首页程序媛
es6之Generator以及异步的三种写法

es6之Generator以及异步的三种写法

作者: ZhongQw | 来源:发表于2018-07-23 09:56 被阅读0次
<script>
function *a() {
   alert("a");
   yield;
   alert("b");
   yield;
   alert("c");
   yield;
}
const b  = a();
      b.next();
      b.next();
</script>

generator与普通函数的明显区别是 *,在函数名前有一个 * ,调用generator函数不能直接执行而是返回一个对象,调用该对象的next()方法,才可以执行。

  • yield暂停操作

传参:第一个next()不能传参,后面的可以

function *a() {
    alert("a");    //"a"
    const m = yield;
    alert("b");    //b""
    alert(m);      //"5"
    yield;
    alert("c");    //"c"
    yield;
}
const m = a.next();
      m.next(5);

返回值:

function *a() {
    alert("a");   //"a"
    yield 3;
    alert("b");    //b""
    yield 7;
    alert("c");    //"c"
    return 10;
}
const g = a(); 
const m = g.next();       //m = 3 
const o = g.next();     // o = 7
const p = g.next();     // p = 10
  • next一个next()推动函数前进一下,直到遇到下一个yield

异步操作

  • 回调(普通写法)
    $.ajax({
        url:xxxx,
        dataTytpe:"json",
        success(data1){
            $.ajax({
                url:xxxx,
                dataTytpe:"json",
                success(data2){
                    $.ajax({
                        url:xxxx,
                        dataTytpe:"json",
                        success(data3){
                            alert(data3);
                        },
                        error(){
                            alert("错误");
                        }
                    })
                },
                error(){
                    alert("错误");
                }
            }) 
        },
        error(){
            alert("错误");
        }
    })
  • promis
Promise.all([
   $.ajax({
        url: '',
}),$.ajax({
        url: '',
}),$.ajax({
        url: '',
}),
...
]).then(function(arr){
    alert("全都成功了");
},function(err){
    alert("全都失败了"+err);
});
  • generator(适合带逻辑的请求)
runner(function *(){
     let data1 = yield $.ajax({...});
     let data2 = yield $.ajax({...});
     let data3 = yield $.ajax({...});
})

相关文章

网友评论

    本文标题:es6之Generator以及异步的三种写法

    本文链接:https://www.haomeiwen.com/subject/dhcrmftx.html