第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

什么是“回調地獄”,RX如何以及為什么解決它?

什么是“回調地獄”,RX如何以及為什么解決它?

海綿寶寶撒 2019-12-12 14:46:25
有人可以給出一個清晰的定義,以及一個簡單的示例,為不懂JavaScript和node.js的人解釋什么是“回調地獄”嗎?什么時候(以哪種設置)發(fā)生“回調地獄問題”?為什么會發(fā)生?“回調地獄”是否總是與異步計算相關?還是在單線程應用程序中也可能發(fā)生“回調地獄”?我在Coursera參加了“反應式課程”,Erik Meijer在他的一次演講中說RX解決了“回調地獄”的問題。我在Coursera論壇上問什么是“回調地獄”,但我沒有明確的答案。在一個簡單的示例上解釋了“回調地獄”之后,您還可以說明該簡單示例上的RX如何解決“回調地獄問題”嗎?
查看完整描述

3 回答

?
慕的地6264312

TA貢獻1817條經(jīng)驗 獲得超6個贊

只需回答這個問題:您能否在這個簡單的例子中也說明RX如何解決“回調地獄問題”?


魔術是flatMap。我們可以在Rx中為@hugomg的示例編寫以下代碼:


def getData() = Observable[X]

getData().flatMap(x -> Observable[Y])

         .flatMap(y -> Observable[Z])

         .map(z -> ...)...

就像您正在編寫一些同步FP代碼一樣,但是實際上您可以通過使它們異步Scheduler。


查看完整回答
反對 回復 2019-12-12
?
吃雞游戲

TA貢獻1829條經(jīng)驗 獲得超7個贊

為了解決Rx如何解決回調地獄的問題:


首先,讓我們再次描述回調地獄。


假設有一個案例,我們必須使用http來獲取三種資源-人,星球和星系。我們的目標是找到一個人居住的星系。首先我們必須讓這個人,然后是行星,再到星系。這是三個異步操作的三個回調。


getPerson(person => { 

   getPlanet(person, (planet) => {

       getGalaxy(planet, (galaxy) => {

           console.log(galaxy);

       });

   });

});

每個回調都是嵌套的。每個內部回調都依賴于其父級。這導致回調地獄的“厄運金字塔”風格。該代碼看起來像一個>符號。


要在RxJs中解決此問題,您可以執(zhí)行以下操作:


getPerson()

  .map(person => getPlanet(person))

  .map(planet => getGalaxy(planet))

  .mergeAll()

  .subscribe(galaxy => console.log(galaxy));

使用mergeMapAKA flatMap運算符,您可以使其更加簡潔:


getPerson()

  .mergeMap(person => getPlanet(person))

  .mergeMap(planet => getGalaxy(planet))

  .subscribe(galaxy => console.log(galaxy));

如您所見,代碼是扁平化的,并且包含單個方法調用鏈。我們沒有“厄運金字塔”。


因此,避免了回調地獄。


萬一您想知道,promise是避免回調地獄的另一種方法,但是promise很渴望,不像可觀察對象那樣懶惰,并且(通常來說)您不能輕易取消它們。


查看完整回答
反對 回復 2019-12-12
  • 3 回答
  • 0 關注
  • 689 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網(wǎng)微信公眾號