相互依賴的異步操作

一些閑話:在18-19-1學(xué)期的項(xiàng)目中髓需,由于想嘗試一點(diǎn)沒(méi)用過(guò)的東西曲聂,開始大力踩坑,特別感謝身在鵝廠的學(xué)長(zhǎng)的遠(yuǎn)程強(qiáng)力支援(敬禮O跖 )

正文

先簡(jiǎn)單描述一下我遇到的問(wèn)題

修改前的代碼片

這一段的目的是創(chuàng)建一個(gè)myTypeNav河哑,然后利用它的數(shù)據(jù)構(gòu)架另外一個(gè)mySubNav
但是在這里會(huì)發(fā)現(xiàn)數(shù)據(jù)并沒(méi)有傳入避诽,這是為什么呢?

問(wèn)題原因

由于在myTypeNav的創(chuàng)建過(guò)程中有發(fā)ajax請(qǐng)求這樣的異步操作璃谨,所以實(shí)際上在resolve([myTypeNav.subTypes, myTypeNav.allGoods])沙庐,這兩個(gè)數(shù)據(jù)還是null,構(gòu)建mySubNav的時(shí)候自然會(huì)由于缺少參數(shù)失去效果佳吞,自然而然影響到了后面的then

解決方案

一拱雏、等待(這個(gè)方案已經(jīng)廢棄)

這個(gè)是在向?qū)W長(zhǎng)請(qǐng)教之前寫的代碼,強(qiáng)行等待異步操作完成底扳,通過(guò)多次試驗(yàn)估計(jì)一下大概要多長(zhǎng)時(shí)間可以完成請(qǐng)求铸抑,然后setTimeout
大概是這個(gè)樣子

setTimeout(() => {
    if (myTypeNav.subTypes && myTypeNav.allGoods) {
        resolve([myTypeNav.subTypes, myTypeNav.allGoods])
    }
}, 100);

致命缺點(diǎn):時(shí)間長(zhǎng)了會(huì)影響頁(yè)面生成的速度,時(shí)間短了可能會(huì)因?yàn)榫W(wǎng)絡(luò)因素仍然得不到數(shù)據(jù)

二、放棄異步請(qǐng)求(喪失尊嚴(yán)的寫法)

ajax請(qǐng)求的過(guò)程不管是自己寫的函數(shù)還是別人造的輪子(比如jquery.ajax)都會(huì)提供參數(shù)衷模,允許設(shè)置為同步請(qǐng)求鹊汛。這樣就可以在myTypeNav完全創(chuàng)建之后再進(jìn)行下步操作蒲赂。
但是這個(gè)不是學(xué)習(xí)的重點(diǎn),不過(guò)多贅述刁憋。

三滥嘴、將myTypeNav中用到的promise暴露出來(lái)(目前使用的方案)

既然myTypeNav是一個(gè)類,那么我們就可以給他設(shè)置屬性至耻。比如我們可以將請(qǐng)求封裝到一個(gè)promise中若皱,然后將這個(gè)promise作為一個(gè)屬性進(jìn)一步調(diào)用。

// myTypeNav.js
class TypeNav {
  // 構(gòu)造函數(shù)尘颓,option包括ele(容器),所有種類的tid和名字
  constructor(option) {
   // 忽略掉的代碼
    this.promise = this.getAll(this.current_id)
  }
getAll(tid){
    // 返回ajax請(qǐng)求的promise對(duì)象
    return ($.ajax({
            type: "GET",
            url: this.url,
            data: {
                t_id: tid
            }
    }).then((data) => {
      data = JSON.parse(data)
      this.allGoods = data.goodsList;
      this.subTypes = data.subTypeList;
      return [this.current_id,this.subTypes,this.allGoods]
    }))
  }
}
// goodList.js
// 構(gòu)建一個(gè)含有 promise 的一級(jí)分類列表
myTypeNav = new TypeNav({
    ele: typenavEle,
    data: types,
    url: localStorage.getItem('lexian-user-typeAPI')
})
// 一級(jí)列表點(diǎn)擊走触,頁(yè)面重構(gòu)
myTypeNav.promise
    .then((value) => {
    // 由第一個(gè)傳過(guò)來(lái)二級(jí)分類參數(shù)和一級(jí)下所有商品信息      
    // 構(gòu)建二級(jí)分類列表
    mySubNav = new SubNav({
        ele: subNavEle,
        data: value[1],
        index: 0
    });
    goodDatas = value[2];
    // 默認(rèn)按照收藏量排序
       goodDatas.sort(sortBylike);
    // 二級(jí)列表點(diǎn)擊,商品刷新
    mySubNav.ele.addEventListener('click', () => {
        goodsEle.innerHTML = '';
        buildGoods(goodsEle, mySubNav.current_sub, goodDatas);
    })
    return [mySubNav.current_sub, value[2]]
    })
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末疤苹,一起剝皮案震驚了整個(gè)濱河市互广,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌卧土,老刑警劉巖兜辞,帶你破解...
    沈念sama閱讀 216,402評(píng)論 6 499
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異夸溶,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)凶硅,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,377評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門缝裁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人足绅,你說(shuō)我怎么就攤上這事捷绑。” “怎么了氢妈?”我有些...
    開封第一講書人閱讀 162,483評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵粹污,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我首量,道長(zhǎng)壮吩,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,165評(píng)論 1 292
  • 正文 為了忘掉前任加缘,我火速辦了婚禮鸭叙,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘拣宏。我一直安慰自己沈贝,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,176評(píng)論 6 388
  • 文/花漫 我一把揭開白布勋乾。 她就那樣靜靜地躺著宋下,像睡著了一般嗡善。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上学歧,一...
    開封第一講書人閱讀 51,146評(píng)論 1 297
  • 那天罩引,我揣著相機(jī)與錄音,去河邊找鬼撩满。 笑死蜒程,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的伺帘。 我是一名探鬼主播昭躺,決...
    沈念sama閱讀 40,032評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼伪嫁!你這毒婦竟也來(lái)了领炫?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,896評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤张咳,失蹤者是張志新(化名)和其女友劉穎帝洪,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體脚猾,經(jīng)...
    沈念sama閱讀 45,311評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡葱峡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,536評(píng)論 2 332
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了龙助。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片砰奕。...
    茶點(diǎn)故事閱讀 39,696評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖提鸟,靈堂內(nèi)的尸體忽然破棺而出军援,到底是詐尸還是另有隱情,我是刑警寧澤称勋,帶...
    沈念sama閱讀 35,413評(píng)論 5 343
  • 正文 年R本政府宣布胸哥,位于F島的核電站,受9級(jí)特大地震影響赡鲜,放射性物質(zhì)發(fā)生泄漏空厌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,008評(píng)論 3 325
  • 文/蒙蒙 一银酬、第九天 我趴在偏房一處隱蔽的房頂上張望蝇庭。 院中可真熱鬧,春花似錦捡硅、人聲如沸哮内。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)北发。三九已至纹因,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間琳拨,已是汗流浹背瞭恰。 一陣腳步聲響...
    開封第一講書人閱讀 32,815評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留狱庇,地道東北人惊畏。 一個(gè)月前我還...
    沈念sama閱讀 47,698評(píng)論 2 368
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像密任,于是被迫代替她去往敵國(guó)和親颜启。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,592評(píng)論 2 353

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