試圖圍繞Javascript承諾包裹我的頭。我正在試驗Q庫。我有一些代碼,輸出什麼,我希望,但我不知道它是如何工作的:then()如何提供其參數
'require strict';
var Q = require("q");
function getFirst(){
var deferred = Q.defer();
var first = 5;
console.log("getting first: " + first);
deferred.resolve(first);
return deferred.promise;
}
function addSecond(first){
var deferred = Q.defer();
var second = 10;
console.log("adding second: " + second);
var result = first + second;
deferred.resolve(result);
return deferred.promise;
}
function printResult(result) {
console.log("result is + " + result);
}
getFirst()
.then(addSecond)
.then(printResult);
在節點運行此我得到:
getting first: 5
adding second: 10
result is + 15
我感到困惑的是如何addSecond和printResult在最終調用時獲取參數? '5'如何神奇地將它變成addSecond?如果addSecond需要一大堆參數呢?
感謝您對此發表看法。
deferred.resolve(first);
所以價值5
:
'then'給它的功能無論以前的承諾得到由'喂resolve'。如果你想'addSecond'被稱爲'addSecond(2,3)',你需要在它後面的promise中做'deferred.resolve(2,3)'。 – Amadan
簡單的答案是「承諾的工作方式」。更詳細地說,promise通過傳遞給它的「then」方法的回調來傳遞結果。 –