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

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

resolve()的傳值問題?

resolve()的傳值問題?

回首憶惘然 2019-05-24 18:44:45
在你不知道的js里有這樣一句話:如果傳給resolve()的是一個非Promise,非thenable的立即值,這個promise就會立即用這個值完成,否則這個這個值會被遞歸的展開。首先這里的立即值就不太明白了?匯編?promise就會立即用這個值完成,這句話什么意思,是promise成功了的意思嗎?否則這個這個值會被遞歸的展開??wtf...Promise,thenable的立即值被遞歸展開?
查看完整描述

2 回答

?
繁星淼淼

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

這是一個好問題!不請自來!
Promise簡單又讓人很不容易掌握的一個對象。題主的問題核心是resolve返回的是一個值,還是一個新的Promise很呈現(xiàn)的結(jié)果是完全不同的。
返回值
即:
letp=newPromise((resolve,reject)=>{
resolve(1);//返回值
});
p.then(val=>{
console.log(val);//1
});
這一點毋庸置疑是我們?nèi)粘=?jīng)常寫的Promise代碼了。
返回新Promise
即:
letp=newPromise((resolve,reject)=>{
//返回新的Promise
returnnewPromise();
});
p.then(val=>{
console.log(val);//1
});
這個時候,p.then()會被暫停,直到內(nèi)部新的Promise被resolve時才會執(zhí)行。
也就是你上面說的所謂遞歸展開。
那什么時候需要呢?
假如我們需要一個HTTP請求之前需要先登錄,那這種方法就好棒棒了。
functionlogin(){
returnnewPromise((resolve,reject)=>{
//success
resolve();
});
}
functionreq(url){
returnnewPromise((resolve,reject)=>{
if(!hasLogin)returnlogin();
//ajaxrequest
resolve();
});
}
req('/user/1').then(user=>{
})
以上!
Happycoding!
                            
查看完整回答
1 反對 回復 2019-05-24
?
婷婷同學_

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

1.立即值這個說法倒是頭一次聽說,意思應該是對應thenable對象,立即值就是非thenable對象或者原始值,最起碼在這句話是是這個意思
2.立即用這個值完成,Promise對象一被創(chuàng)建就會立即執(zhí)行,也就是樓上說的第一個例子,如果resolve一個非thenable對象,Promise的狀態(tài)就會立即變成resolved,然后在本輪事件輪詢結(jié)束調(diào)用回調(diào),這個立即完成其實是對應于resolve一個thenabel對象來說的,也就是你的第三個問題
//問題2簡單示例
setTimeout(()=>console.log('setTimeout'),0);
varp=newPromise(resolve=>{console.log('newPromise');resolve('Promise_resolve');})
console.log(p)
p.then(v=>console.log(v));
console.log('console.log');
3.樓上對于這個問題提的例子是不準確的,應該是resolve(newPromise()),而不是returnnewPromise(),returnnewPromise()并不會改變Promise的狀態(tài)
關(guān)于遞歸展開,如果resolve傳遞的一個Promise對象或者thenable對象,那么他不會立即resolved,而是會等待參數(shù)的狀態(tài)來決定(前提是不resolve自身,否則會立即rejected),至于參數(shù)的狀態(tài)如何決定最終狀態(tài),有點復雜,可以參考Promise/A+規(guī)范
                            
查看完整回答
反對 回復 2019-05-24
  • 2 回答
  • 0 關(guān)注
  • 1890 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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