如何将参数传递给 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)
});