有没有可能以这样一种方式来解决一个promise ,即链中的下一个promise 可以是一个接受多个参数的执行者?
例如,假设我有一个接受三个参数的函数:
function takesThreeParameters (a, b, c) {
console.log(`${a} ${b} ${c}`);
return 'something';
}
如果我将其包含在一个链中,例如:
// case 1: in a new Promise
new Promise((resolve, reject) => resolve( /* ??? */ ))
.then(takesThreeParameters)
.then(console.log);
// case 2: in the middle of a chain somewhere
Promise.resolve()
.then(() => /* ??? */)
.then(takesThreeParameters)
.then(console.log);
// case 3: in the middle of a chain, but not as a function expression
function providesThreeValues () {
return /* ??? */;
}
Promise.resolve()
.then(providesThreeValues)
.then(takesThreeParameters)
.then(console.log);
在这些情况下(或至少在其中一种情况下),我是否可以返回(代替/* ??? */
)将在.then(takesThreeParameters)
中通过所有三个参数的内容?
这个问题的重要部分是,我是否可以将多个参数directly传递给链中的执行器.所以,像这样的策略有点绕过了这个问题:
- 修改
takesThreeParameters
以获取单个参数 - 用字典解析之前的promise ,然后将其解包(例如
abc => takesThreeParameters(abc.a, abc.b, abc.c)
) - 相同,但带有数组等(
abc => takesThreeParameters(abc[0], abc[1], abc[2])
)
也就是说,我正在寻找一种方法,让.then((a, b, c) => /* code */)
这样的东西在一个链条中运行.
我try 了一些挥手的方法,但毫无疑问,这些方法不起作用,例如 case 1:
-
resolve(2,4,6)
导致:2未定义未定义,因为resolve只接受一个参数. -
resolve((2,4,6))
将导致:6 undefined undefined,因为该值是逗号表达式. -
resolve([2,4,6])
个结果:[2,4,6]未定义未定义,如预期. -
resolve({2,4,6})
语法错误
我只是在使用标准promise ,无论 node 附带什么.js v16.13.1(我认为这是ES6?).