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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

JavaScript承諾-拒絕與拋出

JavaScript承諾-拒絕與拋出

藍(lán)山帝景 2019-11-05 10:46:22
我已經(jīng)閱讀了幾篇有關(guān)此主題的文章,但是我仍然不清楚Promise.reject與錯(cuò)誤拋出之間是否存在差異。例如,使用Promise.rejectreturn asyncIsPermitted()    .then(function(result) {        if (result === true) {            return true;        }        else {            return Promise.reject(new PermissionDenied());        }    });使用拋出return asyncIsPermitted()    .then(function(result) {        if (result === true) {            return true;        }        else {            throw new PermissionDenied();        }    });我傾向于僅使用throw它,因?yàn)樗?,但我想知道一個(gè)相對(duì)于另一個(gè)是否有任何優(yōu)勢(shì)。
查看完整描述

3 回答

?
九州編程

TA貢獻(xiàn)1785條經(jīng)驗(yàn) 獲得超4個(gè)贊

使用一個(gè)相對(duì)于另一個(gè)沒(méi)有優(yōu)勢(shì),但是,在特定情況下throw無(wú)法使用。但是,這些情況可以解決。


每當(dāng)您進(jìn)入promise回調(diào)時(shí),都可以使用throw。但是,如果您在任何其他異步回調(diào)中,則必須使用reject。


例如,這不會(huì)觸發(fā)捕獲:


new Promise(function() {

  setTimeout(function() {

    throw 'or nah';

    // return Promise.reject('or nah'); also won't work

  }, 1000);

}).catch(function(e) {

  console.log(e); // doesn't happen

});

相反,您將面臨未解決的承諾和未捕獲的異常。在這種情況下,您可能會(huì)改為使用reject。但是,您可以通過(guò)通知超時(shí)來(lái)解決此問(wèn)題:


function timeout(duration) { // Thanks joews

  return new Promise(function(resolve) {

    setTimeout(resolve, duration);

  });

}


timeout(1000).then(function() {

  throw 'worky!';

  // return Promise.reject('worky'); also works

}).catch(function(e) {

  console.log(e); // 'worky!'

});


查看完整回答
反對(duì) 回復(fù) 2019-11-05
?
幕布斯6054654

TA貢獻(xiàn)1876條經(jīng)驗(yàn) 獲得超7個(gè)贊

另一個(gè)重要的事實(shí)是,reject() DOES NOT像終止控制流return語(yǔ)句一樣。相反,throw確實(shí)終止了控制流。


例:


new Promise((resolve, reject) => {

  throw "err";

  console.log("NEVER REACHED");

})

.then(() => console.log("RESOLVED"))

.catch(() => console.log("REJECTED"));


new Promise((resolve, reject) => {

  reject(); // resolve() behaves similarly

  console.log("ALWAYS REACHED"); // "REJECTED" will print AFTER this

})

.then(() => console.log("RESOLVED"))

.catch(() => console.log("REJECTED"));


查看完整回答
反對(duì) 回復(fù) 2019-11-05
?
一只甜甜圈

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

是的,最大的不同是拒絕是一個(gè)在承諾被拒絕后執(zhí)行的回調(diào)函數(shù),而throw不能異步使用。如果您選擇使用拒絕,您的代碼將繼續(xù)以異步方式正常運(yùn)行,而throw將優(yōu)先完成解析器功能(此功能將立即運(yùn)行)。


我見(jiàn)過(guò)的一個(gè)可以幫助我弄清楚問(wèn)題的示例是,您可以設(shè)置帶有拒絕的Timeout函數(shù),例如:


new Promise(_, reject) {

 setTimeout(reject, 3000);

});

上面不可能用throw編寫(xiě)。


在您的小示例中,兩者之間的區(qū)別難以區(qū)分,但是當(dāng)處理更復(fù)雜的異步概念時(shí),兩者之間的區(qū)別可能會(huì)非常大。


查看完整回答
反對(duì) 回復(fù) 2019-11-05
  • 3 回答
  • 0 關(guān)注
  • 287 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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