试图围绕Javascript承诺。我正在试验Q库。我有一些代码可以输出我期望的内容,但我不确定它是如何工作的:
'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);
在Node i中运行它:
getting first: 5
adding second: 10
result is + 15
我很困惑的是addSecond和printResult在最终被调用时如何获取它们的参数? '5'是如何神奇地将它变成addSecond的?如果addSecond需要一大堆参数怎么办?
感谢您对此有所了解。
答案 0 :(得分:1)
addSecond
获取其参数:
deferred.resolve(first);
因此值为5
。
printResult
获取其参数:
var result = first + second;
deferred.resolve(result);
因此值为first + second
。
你可以试试这个。将要传递给您的函数的值传递到.resolve()
并查看其中的更改。基本上,.resolve
就像是指向传递给.then()
的函数的指针。
答案 1 :(得分:1)
您添加到deferred.resolve([params])的任何参数都将发送到延迟函数或DoneCallback(函数在.then(函数)中指示)。 它接受多个参数(https://api.jquery.com/deferred.resolve/)。
答案 2 :(得分:0)
当你调用一个promise时它会等到底层函数“解析”,然后调用next函数传递已解析的值作为参数(这个值在deferred.resolve(first)
上解析)。然后新函数是否返回一个promise重复循环,否则只需调用next函数传递返回值。
如果需要传递多个参数,可以返回一个数组。
很好的承诺:
答案 3 :(得分:0)
您的addSecond代码可以简化为
function addSecond(first){
var second = 10;
console.log("adding second: " + second);
return first + second;
}