如何将参数传递给 Promise 链中 then() 的参数,同时保留先前解析的值?
How to pass arguments to function as then()'s argument in Promise chain with previous resolved value being kept?
我在节点 v5.7.1 中 运行 JavaScript。我正在尝试找到一种聪明的方法将参数作为 then() 的参数传递给函数,同时仍然保留先前解析的值而不会相互干扰。
var p = new Promise(function (resolve) {
resolve('world!');
});
function logger (prefix) {
return function (resolvedValue) {
console.log(prefix + resolvedValue);
}
}
p.then(logger('Hello '));
这是我目前能弄清楚的。我的目标是让 promise p 做一些需要一些时间的事情,比如数据库操作。之后,p returns 解析值,我想将它以及其他参数作为 then()
的参数传递给回调。
但是我需要编写一个函数 return 另一个函数来实现我的目标。还有其他聪明的方法可以做到这一点吗? spread/rest 运算符 ...
在这种情况下有帮助吗?
闭包完全可以做到这一点。您还可以使用函数表达式:
function logger (prefix, resolvedValue) {
console.log(prefix + resolvedValue);
}
p.then(x => logger('Hello ', x));
甚至数组和解构:
function logger ([prefix, resolvedValue]) {
console.log(prefix + resolvedValue);
}
Promise.all(['Hello', p]).then(logger);
你可以试试这个
var p = new Promise(function (resolve) {
resolve('world!');
});
function logger (prefix,resolvedValue) {
console.log(prefix + resolvedValue);
}
p.then(function (resolvedValue){
logger('Hello ',resolvedValue)
});
我在节点 v5.7.1 中 运行 JavaScript。我正在尝试找到一种聪明的方法将参数作为 then() 的参数传递给函数,同时仍然保留先前解析的值而不会相互干扰。
var p = new Promise(function (resolve) {
resolve('world!');
});
function logger (prefix) {
return function (resolvedValue) {
console.log(prefix + resolvedValue);
}
}
p.then(logger('Hello '));
这是我目前能弄清楚的。我的目标是让 promise p 做一些需要一些时间的事情,比如数据库操作。之后,p returns 解析值,我想将它以及其他参数作为 then()
的参数传递给回调。
但是我需要编写一个函数 return 另一个函数来实现我的目标。还有其他聪明的方法可以做到这一点吗? spread/rest 运算符 ...
在这种情况下有帮助吗?
闭包完全可以做到这一点。您还可以使用函数表达式:
function logger (prefix, resolvedValue) {
console.log(prefix + resolvedValue);
}
p.then(x => logger('Hello ', x));
甚至数组和解构:
function logger ([prefix, resolvedValue]) {
console.log(prefix + resolvedValue);
}
Promise.all(['Hello', p]).then(logger);
你可以试试这个
var p = new Promise(function (resolve) {
resolve('world!');
});
function logger (prefix,resolvedValue) {
console.log(prefix + resolvedValue);
}
p.then(function (resolvedValue){
logger('Hello ',resolvedValue)
});