在下面的测试代码中,我尝试将带有参数(即 t2、t3)的预定义函数传递给 then。但它提示“r”未定义。
var Promise = require('bluebird');
var t2 = function(r) {
console.log("2r: " + r);
return 2 * r;
};
var t3 = function(r) {
console.log("3r: " + r);
return 3 * r;
};
new Promise(function(resolve, reject) {
setTimeout(function() {
resolve(1);
reject(2)
}, 1000);
})
.then(t2(r), t3(r))
.then(t2(r), t3(r))
.then(t2(r), t3(r));
最佳答案
只需传递函数名称即可:
var t2 = function(r) {
console.log("2r: " + r);
return 2 * r;
};
var t3 = function(r) {
console.log("3r: " + r);
return 3 * r;
};
new Promise(function(resolve, reject) {
setTimeout(function() {
resolve(1);
reject(2)
}, 1000); // (*)
})
.then(t2, t3)
.then(t2, t3)
.then(t2, t3);
如果您实际上想传递您事先知道的其他参数,请使用t2
和t3
>高阶函数返回函数,以便您可以在.then
的参数列表中调用:
var t2 = extra => r => {
console.log("2r: " + r);
console.log('extra param: ' + extra);
return 2 * r;
};
var t3 = extra => r => {
console.log("3r: " + r);
console.log('extra param: ' + extra);
return 3 * r;
};
const r = 'foo';
new Promise(function(resolve, reject) {
setTimeout(function() {
resolve(1);
reject(2)
}, 1000); // (*)
})
.then(t2(r), t3(r))
.then(t2(r), t3(r))
.then(t2(r), t3(r));
关于javascript - promise : how to pass function with parameters?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51690100/