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

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

defer()。promise和Promise之間的區(qū)別

defer()。promise和Promise之間的區(qū)別

千萬里不及你 2019-07-30 17:23:23
defer()。promise和Promise之間的區(qū)別我知道推遲分離承諾狀態(tài)控制和處理,這里使用Q作為例子,承諾返回的承諾Q.defer().promise和Q.Promise完全不同,為什么設(shè)計(jì)這樣?這兩個(gè)“承諾”有什么區(qū)別提前致謝PS:我目前正在開發(fā)Promise庫,歡迎使用issws和PRS:https://github.com/jiananshi/Promise-polyfill
查看完整描述

1 回答

?
森林海

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

嗯,這是關(guān)于承諾解決方案的來源。Q和一堆其他庫提供了兩個(gè)API:

  • 遺留deferAPI - 您可以在其中創(chuàng)建延期,.resolve(value) 并且它具有您可以返回的承諾。

  • promise構(gòu)造函數(shù) - 這是一個(gè)現(xiàn)代API,您可以在其中從完成源創(chuàng)建承諾。

粗略地做:

var d = Q.defer();setTimeout(function(){ d.resolve(); }, 1000); return d.promise;

是相同的:

return new Promise(function(resolve, reject){
   setTimeout(resolve, 1000);});

所以你可能會(huì)問

為什么我們需要兩個(gè)API?

好吧,推遲API首先出現(xiàn)。這是其他語言處理它的方式,它是文章處理它的方式,也是人們首先使用它的方式 - 然而 - 這兩種API之間存在著重要的區(qū)別。promise構(gòu)造函數(shù)是安全的。

投擲安全

承諾抽象異常處理并保持安全。如果你扔進(jìn)一個(gè)承諾鏈,它會(huì)將該異常轉(zhuǎn)換為拒絕,引用規(guī)范:

如果onFulfilled或onRejected引發(fā)異常e,則必須拒絕promise2,并將e作為原因

假設(shè)您正在從XHR請(qǐng)求中解析JSON:

function get(){
    var d = Q.defer();
    if(cached) { // use cached version user edited in localStorage
        d.resolve(JSON.parse(cached));
    } else { // get from server
       myCallbackApi('/foo', function(res){ d.resolve(res); });
    }}

現(xiàn)在,讓我們看看promise構(gòu)造函數(shù)版本:

function get(){
    return new Promise(function(resolve, reject){ 
        if(cached) { // use cached version user edited in localStorage
            resolve(JSON.parse(cached));
        } else { // get from server
           myCallbackApi('/foo', resolve);
        }
    });}

現(xiàn)在,假設(shè)您的服務(wù)器以某種方式向您發(fā)送了無效的JSON(或者用戶將其編輯為無效狀態(tài))并緩存了它。

在延遲版本中 - 它會(huì)同步拋出。所以你必須一般防范它。在底部版本它沒有。最高版本的用法如下:

try{
  return get().catch(function(e){
     return handleException(e); // can also just pass as function
  });} catch(e){ 
   handleException(e);}

在底部版本中 - promise構(gòu)造函數(shù)會(huì)將throws 轉(zhuǎn)換為拒絕,因此它足以做到:

return get().then(function(e){
   return handleException(e);});

防止一整類程序員錯(cuò)誤發(fā)生。


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

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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