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

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

如何理解angularjs的Promise對象是一種異步方法?

如何理解angularjs的Promise對象是一種異步方法?

尚方寶劍之說 2018-12-27 10:15:41
沒搞明白,求解,我一直以為是同步的。。
查看完整描述

1 回答

?
POPMUISE

TA貢獻(xiàn)1765條經(jīng)驗 獲得超5個贊

“對象”是一種異步方法


這種說法,本身是有問題的。 Promise 只是工具,只能說形式上是“回調(diào)”,形式上是“異步”(確定的同步環(huán)境,不用 return 而用 callback 找虐的人應(yīng)該沒有吧),執(zhí)行是到底是不是“異步”,不一定的。


我們把“異步”與“異步形式”分開來說。


一般說的“異步”是指有上下文切換的場景,比較 setTimeout ,就是很典型的,可以簡單理解為,代碼執(zhí)行到這里之后,就切換到其它地方了,然后后面某個時刻,又可能切換回來。(細(xì)節(jié)一兩句話講不清楚,流程上是這樣)


“異步形式”一般來說,就是“回調(diào)”,從形式上來看,這就是異步與同步的區(qū)別,同步的函數(shù),是 return ,異步的函數(shù),需要傳遞一個 callback ( Promise 之類的語法糖就不說了),然后在函數(shù)里顯式調(diào)用 callback 作用“返回”。


比如一個函數(shù),同步形式:


function syncFunc(){

    return "Hello";

}

異步形式:


function asyncFunc(callback) {

    callback("Hello");

}

這很容易理解吧。


注意,我們上面說的,“異步形式”,重點是“形式”,與真正的是不是“異步”的流程,實際上是沒有必然聯(lián)系的。比如上面的代碼例子, syncFunc 和 asyncFunc 只是形式上不同,但是,這兩個函數(shù)都不涉及上下文切換,所以,這里沒有真正的“異步”的。


function realAsyncFunc(callback) {

    setTimeout(function(){callback('Hello')}, 10 * 1000)

}

這是真正的異步函數(shù)了,因為:


realAsyncFunc(aFunc);

這樣調(diào)用之后,代碼會繼續(xù)執(zhí)行,等到 10 秒之后,又切回來執(zhí)行回調(diào)函數(shù)。


反正,重點是理解 上下文 這個概念。(跟 this 的那個 context 指的不是一個東西,別搞混了),不理解的話,就多從形式上去看吧。


回到 Promise ,這套 API 形式上是“回調(diào)”的,所以,我們可以說它形式上“異步”的,但是實際執(zhí)行是到底是不是異步,這個不一定,看你用在什么地方啦。(與前面的 asyncFunc一個道理)


查看完整回答
反對 回復(fù) 2019-01-08
  • 1 回答
  • 0 關(guān)注
  • 499 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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