Promise.all()。then()解决吗?

使用节点4.x。当您有Promise.all(promises).then()什么正确的方法来解析数据并将其传递给下一个.then()

我想做这样的事情:

Promise.all(promises).then(function(data){

// Do something with the data here

}).then(function(data){

// Do more stuff here

});

但是我不确定如何将数据发送到第二个.then()。我不能resolve(...)先用.then()。我知道我可以做到这一点:

return Promise.all(promises).then(function(data){

// Do something with the data here

return data;

}).then(function(data){

// Do more stuff here

});

但这似乎不是执行此操作的正确方法…正确的方法是什么?

回答:

但这似乎不是正确的方法。

确实,这是执行此操作的正确方法(或者至少 执行此操作

正确方法)。这是Promise的关键方面,它们是一个管道,数据可以由管道中的各种处理程序处理。

例:

const promises = [

new Promise(resolve => setTimeout(resolve, 0, 1)),

new Promise(resolve => setTimeout(resolve, 0, 2))

];

Promise.all(promises)

.then(data => {

console.log("First handler", data);

return data.map(entry => entry * 10);

})

.then(data => {

console.log("Second handler", data);

});

catch为简洁起见,省略了处理程序。在生产代码中, 传播承诺或处理拒绝。)

我们从中看到的输出是:

第一把手[1,2]

二级处理者[10,20]

…因为第一个处理程序将两个promise(12)的分辨率作为一个数组,然后创建一个新数组,每个数组都乘以10并返回它。第二个处理程序获取第一个处理程序返回的内容。

如果您正在执行的其他工作是同步的,则还可以将其 放在 第一个处理程序中:

例:

const promises = [

new Promise(resolve => setTimeout(resolve, 0, 1)),

new Promise(resolve => setTimeout(resolve, 0, 2))

];

Promise.all(promises)

.then(data => {

console.log("Initial data", data);

data = data.map(entry => entry * 10);

console.log("Updated data", data);

return data;

});

…但是如果它是异步的,您将不想这样做,因为它最终会嵌套,并且嵌套会很快失去控制。

以上是 Promise.all()。then()解决吗? 的全部内容, 来源链接: utcz.com/qa/430934.html

回到顶部