欧美日韩国产一区,亚洲一区视频,色综合久久久久,私密按摩师舌头伸进去了,99re6这里只有精品,夜夜性日日交xxx性hd

微信小程序網絡之異步流程控制(8)

  • • 發表于 8年前
  • • 作者 Fredia
  • • 2696 人瀏覽
  • • 1 條評論
  • • 最后編輯時間 8年前
  • • 來自 [技 術]

原創聲明:本文為作者原創,未經允許不得轉載,經授權轉載需注明作者和出處

本文主要有關系的是co模塊

無論是前端還是后端,對于異步回調都很了解熟悉,瀏覽器中的各種交互邏輯都是通過事件回調實現的,前端邏輯越來越復雜,導致回調函數越來越多。

回調的難維護性

有的時候,由于我們業務的需要,我們必須得使用過多的回調函數嵌套

$.post('/app/user', function(data) { 
  console.log(data); 
  $.post('/app/banks',{''userId":"data.userId''}, function(result) {
       console.log(result); 
        $.post('/app/money',{''cardNo":"result.cardNo''}, function(res) { 
            console.log(res.howMuchMoney) 
      }); 
    });
  });

我們來分析co模塊的執行

function co(gen) {
 var ctx= gen(); 
 var ret = ctx.next();
 ret.value.then(function(res) {
 ctx.next(res); 
  });
}

首先生成一個迭代器,然后執行一遍 next(),得到的 value 是一個 Promise 對象,Promise.then() 里面再執行 next()。當然這只是一個原理性的演示,很多錯誤處理和循環調用 next() 的邏輯都沒有寫出來。

與傳統模式對比

傳統模式:hahahello是一個異步函數

function hahahello() { 
return Promise.resolve('hello').then(function(hello) { 
  console.log(hello); 
});
}
function helloworld() { 
  hahahello();
  console.log('world');
}
helloworld();

輸出

    "world"
    "hello"

co 模塊:

function co(gen) { 
var ctx= gen(); 
var ret = ctx.next(); 
ret.value.then(function(res) { 
  ctx.next(res);
 });
}
function hahahello() { 
return Promise.resolve('hello').then(function(hello) { 
console.log(hello); 
});
}
co(function *helloworld() { 
yield hahahello(); 
console.log('world');
});

此時輸出

"hello"
"world"

那么co模塊最大的好處是啥了?

消除回調金字塔

var co = require('co');
co(function *() { 
  yield sayI(); 
  yield sayLove(); 
  yield sayYou();
  yield sayXiaohuangxiang();
});

打印出:

I 
Love 
You
Xiaohuangxiang

根據meikidd文章學習心得

分享到:
1條評論
Ctrl+Enter
作者

Fredia

Fredia

APP:1 帖子:12 回復:30 積分:552

已加入社區[3109]天

CTOWAY

作者詳情》
Top