我新的角度,我做了一些研究,但仍無法找到答案......, 我有以下代碼:承諾對象的方法的參數,則()的回調函數
promiseB = promiseA.then(function(result) {
return result + 1;
});
爲什麼我們可以使用result
作爲回調函數的參數? promiseA
的退貨如何變成result
?
謝謝大家!
我新的角度,我做了一些研究,但仍無法找到答案......, 我有以下代碼:承諾對象的方法的參數,則()的回調函數
promiseB = promiseA.then(function(result) {
return result + 1;
});
爲什麼我們可以使用result
作爲回調函數的參數? promiseA
的退貨如何變成result
?
謝謝大家!
承諾僅僅是一個用來表示待處理活動的對象,不要將其與該活動的結果混淆。
已解決的值將傳遞給給.then()
方法的成功回調。如果承諾鏈接在一起,那麼從該回調返回的值成爲傳遞到下一個.then()
的值(或者如果返回的值也是承諾,則該承諾的解決方案將傳遞到下一個.then()
)。
因此,在您的特定示例中,我們不知道result
來自哪裏:無論創建的promiseA
只是簡單地確保它以該值解決。但是,我們確實知道promiseB
將使用值result+1
解決,因爲這是您返回的內容。
當promiseA
完成(「解析」)時,它將調用您傳遞給then()
函數的函數,並將結果傳遞給該函數。假設我有一個承諾,即從數據庫查詢請求信息。假設它將(最終)給我一個用戶的電話號碼。我建立了我的代碼,以打印出這樣的:
myPromise.then(function(phoneNum) {
console.log(phoneNum);
});
,我們不能只說var result = myPromise()
的原因是因爲一個承諾在不同的流程,該代碼的其餘部分執行。我們需要建立一個函數來處理結果時如何使用$ Q服務,您可以defer
承諾返回和sucesives回調過程中,defer.promise
這是關鍵的完成
檢查。
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
因爲這承諾是如何定義的。解析值(單個)成爲下一個'then'處理程序的參數。也許你混淆了作爲承諾對象的「回報價值」和承諾的「解決價值」? –
所以這是一個角度的定義,我們只是用它。 promise的解析將成爲'.then()'中回調函數的參數。 –
它與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)。 (恕我直言藍鳥是無可爭議的贏家) –