2016-03-29 60 views
0

我新的角度,我做了一些研究,但仍無法找到答案......, 我有以下代碼:承諾對象的方法的參數,則()的回調函數

promiseB = promiseA.then(function(result) { 
    return result + 1; 
}); 

爲什麼我們可以使用result作爲回調函數的參數? promiseA的退貨如何變成result

謝謝大家!

+0

因爲這承諾是如何定義的。解析值(單個)成爲下一個'then'處理程序的參數。也許你混淆了作爲承諾對象的「回報價值」和承諾的「解決價值」? –

+0

所以這是一個角度的定義,我們只是用它。 promise的解析將成爲'.then()'中回調函數的參數。 –

+0

它與AngularJS無關。它只是一個使用過的修改過的庫,它被稱爲'$ q'。這些承諾是獨立定義的https://en.wikipedia.org/wiki/Futures_and_promises,https://www.promisejs.org/。並有各種[實施](https://github.com/promises-aplus/promises-spec/blob/master/implementations.md)。 (恕我直言藍鳥是無可爭議的贏家) –

回答

1

承諾僅僅是一個用來表示待處理活動的對象,不要將其與該活動的結果混淆。

已解決的值將傳遞給給.then()方法的成功回調。如果承諾鏈接在一起,那麼從該回調返回的值成爲傳遞到下一個.then()的值(或者如果返回的值也是承諾,則該承諾的解決方案將傳遞到下一個.then())。

因此,在您的特定示例中,我們不知道result來自哪裏:無論創建的promiseA只是簡單地確保它以該值解決。但是,我們確實知道promiseB將使用值result+1解決,因爲這是您返回的內容。

1

promiseA完成(「解析」)時,它將調用您傳遞給then()函數的函數,並將結果傳遞給該函數。假設我有一個承諾,即從數據庫查詢請求信息。假設它將(最終)給我一個用戶的電話號碼。我建立了我的代碼,以打印出這樣的:

myPromise.then(function(phoneNum) { 
    console.log(phoneNum); 
}); 

,我們不能只說var result = myPromise()的原因是因爲一個承諾在不同的流程,該代碼的其餘部分執行。我們需要建立一個函數來處理結果時如何使用$ Q服務,您可以defer承諾返回和sucesives回調過程中,defer.promise這是關鍵的完成

0

檢查。

var promiseB = myService.response().then(function(result){ 
      var defer = $q.defer(); 
      defer.resolve(result); 
      return defer.promise; 
     }); 
promiseB.then(function(result){ 
      console.log("In promise B ===>", result); 
     }); 

檢查這個codepen:http://codepen.io/gpincheiraa/pen/ONjMrR?editors=0010