Flutter回調(diào)地獄及多個(gè)請(qǐng)求依賴處理

僅記錄flutter重要筆記

1. 多個(gè)請(qǐng)求依賴, 僅用于多個(gè)異步操作都完成后, 執(zhí)行其它操作, 關(guān)鍵語(yǔ)法: Future.wait[], "wait"傳入異步操作的數(shù)組, 只有都返回結(jié)果了, 才會(huì)調(diào)用.then()方法
Future.wait([
  // 2秒后返回結(jié)果  
  Future.delayed(new Duration(seconds: 2), () {
    return "hello";
  }),
  // 4秒后返回結(jié)果  
  Future.delayed(new Duration(seconds: 4), () {
    return " world";
  })
]).then((results){
  print(results[0]+results[1]);
}).catchError((e){
  print(e);
});

執(zhí)行結(jié)果: 4秒后打印

2. 回調(diào)地獄(Callback Hell)
a請(qǐng)求依賴b請(qǐng)求的結(jié)果, b請(qǐng)求依賴c請(qǐng)求的結(jié)果, 大概就是 c -> b -> a

正常做法大概是這樣的:

//先分別定義各個(gè)異步任務(wù)
Future<String> login(String userName, String pwd){
    ...
    //用戶登錄
};
Future<String> getUserInfo(String id){
    ...
    //獲取用戶信息 
};
Future saveUserInfo(String userInfo){
    ...
    // 保存用戶信息 
}; 


//再進(jìn)行調(diào)用
login("alice","******").then((id){
 //登錄成功后通過,id獲取用戶信息    
 getUserInfo(id).then((userInfo){
    //獲取用戶信息后保存 
    saveUserInfo(userInfo).then((){
       //保存用戶信息,接下來執(zhí)行其它操作
        ...
    });
  });
})

這種寫代碼的方式簡(jiǎn)直不能忍

關(guān)鍵方法, Future.then(), 這個(gè)方法返回的還是一個(gè) Future, 可以很好的鏈?zhǔn)秸{(diào)用, 所以優(yōu)雅些是這樣的

login("alice","******").then((id){
    return getUserInfo(id);
}).then((userInfo){
    return saveUserInfo(userInfo);
}).then((e){
   //執(zhí)行接下來的操作 
}).catchError((e){
  //錯(cuò)誤處理  
  print(e);
});
    • 但是 , 似乎還是有問題, 還有一層嵌套呢, 咋搞?

關(guān)鍵方法: 可以使用 async/await 來消除 callback hell
async用來表示函數(shù)是異步的沪么,定義的函數(shù)會(huì)返回一個(gè)Future對(duì)象械蹋,可以使用then()方法添加回調(diào)函數(shù)检激。
await 后面是一個(gè)Future齐莲,表示等待該異步任務(wù)完成嚣鄙,異步完成后才會(huì)往下走放祟;await必須出現(xiàn)在 async 函數(shù)內(nèi)部鳍怨。

所以再優(yōu)雅些這樣的
task() async {
   try{
    String id = await login("alice","******");
    String userInfo = await getUserInfo(id);
    await saveUserInfo(userInfo);
    //執(zhí)行接下來的操作   
   } catch(e){
    //錯(cuò)誤處理   
    print(e);   
   }  
}


** 以上示例引用原地址 ** 強(qiáng)烈推薦

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市跪妥,隨后出現(xiàn)的幾起案子鞋喇,更是在濱河造成了極大的恐慌,老刑警劉巖眉撵,帶你破解...
    沈念sama閱讀 212,816評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件侦香,死亡現(xiàn)場(chǎng)離奇詭異落塑,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)罐韩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,729評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門憾赁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人散吵,你說我怎么就攤上這事龙考。” “怎么了矾睦?”我有些...
    開封第一講書人閱讀 158,300評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵晦款,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我枚冗,道長(zhǎng)柬赐,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,780評(píng)論 1 285
  • 正文 為了忘掉前任官紫,我火速辦了婚禮肛宋,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘束世。我一直安慰自己酝陈,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,890評(píng)論 6 385
  • 文/花漫 我一把揭開白布毁涉。 她就那樣靜靜地躺著沉帮,像睡著了一般。 火紅的嫁衣襯著肌膚如雪贫堰。 梳的紋絲不亂的頭發(fā)上穆壕,一...
    開封第一講書人閱讀 50,084評(píng)論 1 291
  • 那天,我揣著相機(jī)與錄音其屏,去河邊找鬼喇勋。 笑死,一個(gè)胖子當(dāng)著我的面吹牛偎行,可吹牛的內(nèi)容都是我干的川背。 我是一名探鬼主播,決...
    沈念sama閱讀 39,151評(píng)論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼蛤袒,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼熄云!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起妙真,我...
    開封第一講書人閱讀 37,912評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤缴允,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后珍德,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體练般,經(jīng)...
    沈念sama閱讀 44,355評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡健蕊,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,666評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了踢俄。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,809評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡晴及,死狀恐怖都办,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情虑稼,我是刑警寧澤琳钉,帶...
    沈念sama閱讀 34,504評(píng)論 4 334
  • 正文 年R本政府宣布,位于F島的核電站蛛倦,受9級(jí)特大地震影響歌懒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜溯壶,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,150評(píng)論 3 317
  • 文/蒙蒙 一及皂、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧且改,春花似錦验烧、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至慨蓝,卻和暖如春感混,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背礼烈。 一陣腳步聲響...
    開封第一講書人閱讀 32,121評(píng)論 1 267
  • 我被黑心中介騙來泰國(guó)打工弧满, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人此熬。 一個(gè)月前我還...
    沈念sama閱讀 46,628評(píng)論 2 362
  • 正文 我出身青樓谱秽,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親摹迷。 傳聞我的和親對(duì)象是個(gè)殘疾皇子疟赊,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,724評(píng)論 2 351

推薦閱讀更多精彩內(nèi)容

  • Dart類庫(kù)有非常多的返回Future或者Stream對(duì)象的函數(shù)。 這些函數(shù)被稱為異步函數(shù):它們只會(huì)在設(shè)置好一些耗...
    seventhboy閱讀 1,198評(píng)論 0 2
  • 小菜前幾天剛學(xué)習(xí)了 Future 實(shí)現(xiàn)異步操作的部分方法峡碉,主要包括構(gòu)造方法和常用的靜態(tài)方法近哟;小菜今天繼續(xù)學(xué)習(xí) Fu...
    阿策神奇閱讀 938評(píng)論 0 4
  • Flutter探究 背景 為什么是flutter flutter的優(yōu)勢(shì): 跨平臺(tái)多端一致:Flutter 從設(shè)計(jì)上...
    superFool閱讀 320評(píng)論 0 0
  • 前言:學(xué)習(xí) Flutter 有一段時(shí)間了,本篇文章主要是記錄下 Flutter 學(xué)習(xí)歷程的一些心得和開發(fā)體驗(yàn)鲫寄,羅列...
    沉江小魚閱讀 4,591評(píng)論 3 30
  • 今天我們聊聊跨平臺(tái)解決方案吉执,通過此文疯淫,我們可以了解到 跨平臺(tái)技術(shù)的主流解決方案,對(duì)比 flutter的原理戳玫、優(yōu)勢(shì) ...
    紫闞閱讀 8,281評(píng)論 0 7