乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      淺談Angular的 $q, defer, promise

       昵稱10504424 2016-01-13

      1. $q

      $q是Angular的一種內(nèi)置服務(wù),它可以使你異步地執(zhí)行函數(shù),并且當(dāng)函數(shù)執(zhí)行完成時(shí)它允許你使用函數(shù)的返回值(或異常)。

      2. defer

      defer的字面意思是延遲,$q.defer() 可以創(chuàng)建一個(gè)deferred實(shí)例(延遲對(duì)象實(shí)例)。

      deferred 實(shí)例旨在暴露派生的Promise 實(shí)例,以及被用來作為成功完成或未成功完成的信號(hào)API,以及當(dāng)前任務(wù)的狀態(tài)。這聽起來好復(fù)雜的樣子,總結(jié)$q, defer, promise三者之間的關(guān)系如下所示。

      var deferred = $q.defer();  //通過$q服務(wù)注冊(cè)一個(gè)延遲對(duì)象 deferred
      var promise = deferred.promise;  //通過deferred延遲對(duì)象,可以得到一個(gè)承諾promise,而promise會(huì)返回當(dāng)前任務(wù)的完成結(jié)果

      defer的方法:

          1. deferred.resolve(value)  成功解決(resolve)了其派生的promise。參數(shù)value將來會(huì)被用作promise.then(successCallback(value){...}, errorCallback(reason){...}, notifyCallback(notify){...})中successCallback函數(shù)的參數(shù)。

          2. deferred.reject(reason)  未成功解決其派生的promise。參數(shù)reason被用來說明未成功的原因。此時(shí)deferred實(shí)例的promise對(duì)象將會(huì)捕獲一個(gè)任務(wù)未成功執(zhí)行的錯(cuò)誤,promise.catch(errorCallback(reason){...})。補(bǔ)充一點(diǎn),promise.catch(errorCallback)實(shí)際上就是promise.then(null, errorCallback)的簡寫。

          3. notify(value)  更新promise的執(zhí)行狀態(tài)(翻譯的不好,原話是provides updates on the status of the promise's execution)

      defer的小例子:    

      復(fù)制代碼
      function asyncGreet(name) {
        var deferred = $q.defer();  //通過$q.defer()創(chuàng)建一個(gè)deferred延遲對(duì)象,在創(chuàng)建一個(gè)deferred實(shí)例時(shí),也會(huì)創(chuàng)建出來一個(gè)派生的promise對(duì)象,使用deferred.promise就可以檢索到派生的promise。
      
        deferred.notify('About to greet ' + name + '.');  //延遲對(duì)象的notify方法。
      
        if (okToGreet(name)) {
          deferred.resolve('Hello, ' + name + '!');  //任務(wù)被成功執(zhí)行
        } else {
          deferred.reject('Greeting ' + name + ' is not allowed.');  //任務(wù)未被成功執(zhí)行
        }
      
        return deferred.promise;  //返回deferred實(shí)例的promise對(duì)象
      }
      
      function okToGreet(name) {
        //只是mock數(shù)據(jù),實(shí)際情況將根據(jù)相關(guān)業(yè)務(wù)實(shí)現(xiàn)代碼
        if(name == 'Superman') return true;  
        else return false;
      }
      
      var promise = asyncGreet('Superman');  //獲得promise對(duì)象
      //promise對(duì)象的then函數(shù)會(huì)獲得當(dāng)前任務(wù)也就是當(dāng)前deferred延遲實(shí)例的執(zhí)行狀態(tài)。它的三個(gè)回調(diào)函數(shù)分別會(huì)在resolve(), reject() 和notify()時(shí)被執(zhí)行
      promise.then(function(greeting) {
        alert('Success: ' + greeting);
      }, function(reason) {
        alert('Failed: ' + reason);
      }, function(update) {
        alert('Got notification: ' + update);
      });
      復(fù)制代碼

      3. promise

      當(dāng)創(chuàng)建一個(gè)deferred實(shí)例時(shí),promise實(shí)例也會(huì)被創(chuàng)建。通過deferred.promise就可以檢索到deferred派生的promise。

      promise的目的是允許interested parties 訪問deferred任務(wù)完成的結(jié)果。

      按照CommonJS的約定,promise是一個(gè)與對(duì)象交互的接口,表示一個(gè)動(dòng)作(action)的結(jié)果是異步的,而且在任何給定的時(shí)間點(diǎn)上可能或不可能完成。(這句話好繞口,我的理解是promise相當(dāng)于一個(gè)承諾,承諾你這個(gè)任務(wù)在給定的時(shí)間點(diǎn)上可能會(huì)完成,也可能完成不了。如果完成了那就相當(dāng)于resolve, 如果未完成就相當(dāng)于reject。不知道這樣理解對(duì)不對(duì)?)

      promise 的方法:

          1. then(successCallback, errorCallback, nitifyCallback) 根據(jù)promise被resolve/reject,或?qū)⒁籸esolve/reject,調(diào)用successCallback/errorCallback。

          2. catch(errorCallback)  then(null, errorCallback)的縮寫。

          3. finally(callback, notifyCallback)

      補(bǔ)充說明:

          promise.then()會(huì)返回一個(gè)新的衍生promise,形成promise鏈。例如:

      promiseB = promiseA.then(function(result) {
        return result + 1;
      });
      
      // promiseB will be resolved immediately after promiseA is resolved and its value
      // will be the result of promiseA incremented by 1

       

        本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評(píng)論

        發(fā)表

        請(qǐng)遵守用戶 評(píng)論公約

        類似文章 更多