then() 如何提供它的参数
How does then() feed its parameters
试图让我的头脑围绕 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 中我得到:
getting first: 5
adding second: 10
result is + 15
我比较疑惑的是addSecond和printResult最终调用时是怎么获取参数的? “5”是如何神奇地变成 addSecond 的?如果 addSecond 需要一大堆参数怎么办?
感谢您阐明这一点。
addSecond
的参数来自:
deferred.resolve(first);
所以值为 5
。
printResult
从以下位置获取参数:
var result = first + second;
deferred.resolve(result);
所以值为 first + second
。
您可以试验一下。将要传递给函数的值传递给 .resolve()
并查看它的变化。基本上,.resolve
就像一个指向您传递给 .then()
的函数的指针。
您添加到 deferred.resolve([params]) 的任何参数都会发送到延迟函数或 DoneCallback(.then(function) 中指示的函数)。
它确实接受多个参数 (https://api.jquery.com/deferred.resolve/).
当您调用 promise 时,它会等到基础函数 "resolves",然后调用下一个函数,将已解析的值作为参数传递(此值在 deferred.resolve(first)
上解析)。然后新函数 return 是否承诺重复循环,否则只需调用下一个传递 returned 值的函数。
如果需要传递多个参数,可以return一个数组。
出色的承诺介绍:
您的 addSecond 代码可以简化为
function addSecond(first){
var second = 10;
console.log("adding second: " + second);
return first + second;
}
试图让我的头脑围绕 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 中我得到:
getting first: 5
adding second: 10
result is + 15
我比较疑惑的是addSecond和printResult最终调用时是怎么获取参数的? “5”是如何神奇地变成 addSecond 的?如果 addSecond 需要一大堆参数怎么办?
感谢您阐明这一点。
addSecond
的参数来自:
deferred.resolve(first);
所以值为 5
。
printResult
从以下位置获取参数:
var result = first + second;
deferred.resolve(result);
所以值为 first + second
。
您可以试验一下。将要传递给函数的值传递给 .resolve()
并查看它的变化。基本上,.resolve
就像一个指向您传递给 .then()
的函数的指针。
您添加到 deferred.resolve([params]) 的任何参数都会发送到延迟函数或 DoneCallback(.then(function) 中指示的函数)。 它确实接受多个参数 (https://api.jquery.com/deferred.resolve/).
当您调用 promise 时,它会等到基础函数 "resolves",然后调用下一个函数,将已解析的值作为参数传递(此值在 deferred.resolve(first)
上解析)。然后新函数 return 是否承诺重复循环,否则只需调用下一个传递 returned 值的函数。
如果需要传递多个参数,可以return一个数组。
出色的承诺介绍:
您的 addSecond 代码可以简化为
function addSecond(first){
var second = 10;
console.log("adding second: " + second);
return first + second;
}