Javascript 在setTimeout内传递多个参数以承诺解析
我试图遵循MDN示例,但似乎无法将更多参数传递给 这将打印出Javascript 在setTimeout内传递多个参数以承诺解析,javascript,asynchronous,promise,es6-promise,Javascript,Asynchronous,Promise,Es6 Promise,我试图遵循MDN示例,但似乎无法将更多参数传递给 这将打印出[1,“两个”],我希望打印出[1,2,3,“两个”]。使用setTimeout执行此操作而不履行承诺,效果与预期一样 setTimeout(cb, 100, 1, 2, 3); function cb(a, b, c){ console.log(a, b, c); } //=>1 2 3 为什么这不符合承诺?如何使它与承诺一起工作?函数只接受一个参数。你不能改变,因为这是规范 如果传递的值超过此值,则不会产生任何影响,并且
[1,“两个”]
,我希望打印出[1,2,3,“两个”]
。使用setTimeout
执行此操作而不履行承诺,效果与预期一样
setTimeout(cb, 100, 1, 2, 3);
function cb(a, b, c){
console.log(a, b, c);
}
//=>1 2 3
为什么这不符合承诺?如何使它与承诺一起工作?函数只接受一个参数。你不能改变,因为这是规范 如果传递的值超过此值,则不会产生任何影响,并且会忽略其他值 您可以选择将数组传递给
resolve
函数,但您将在then
处理程序上获得一个数组,而不是您想要的独立值。resolve()
只接受和处理一个参数,而满足的承诺只有一个值。这是根据承诺规范,您不能更改
如果要传递多条信息,则可以将多条数据包装到数组或对象中,并使用该对象作为解析值,然后更改接收代码以在包装对象中访问它:
var p1 = new Promise((resolve, reject) => {
// put multiple resolved values into an array
setTimeout(resolve, 200, [1,2,3]), 200);
});
var p2 = new Promise((resolve, reject) => {
setTimeout(resolve, 500, "two");
});
Promise.all([p1, p2]).then(value => {
console.log(value); // [[1,2,3], "two"]
}, reason => {
console.log(reason)
});
如果您确实希望在没有嵌入数组的最终
.then()
处理程序中包含独立值,则可以在处理结果之前展平.then()
处理程序中的值
数组。这里有许多用于展平数组的技术:如果已知Promise
s的数量,您还可以将分解分配传递给then
处理程序:。然后([first,second])=>
。如何获得独立的值?
var p1 = new Promise((resolve, reject) => {
// put multiple resolved values into an array
setTimeout(resolve, 200, [1,2,3]), 200);
});
var p2 = new Promise((resolve, reject) => {
setTimeout(resolve, 500, "two");
});
Promise.all([p1, p2]).then(value => {
console.log(value); // [[1,2,3], "two"]
}, reason => {
console.log(reason)
});