使用节点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().我不能在第一个.then()中使用resolve(…).我想到我可以做到这一点:
return Promise.all(promises).then(function(data){ // Do something with the data here return data; }).then(function(data){ // Do more stuff here });
但这似乎不是正确的做法…这是正确的方法?
解决方法
But that doesn’t seem like the proper way to do it..
这确实是正确的做法.这是承诺的一个关键方面,它们是一条管道,数据可以由各种处理程序进行按摩.
例:
const promises = [ new Promise(resolve => setTimeout(resolve,1)),new Promise(resolve => setTimeout(resolve,2)) ]; Promise.all(promises) .then(data => { console.log("First handler",data); return data.map(entry => entry * 10); }) .then(data => { console.log("Second handler",data); });
我们看到的输出是:
First handler [1,2] Second handler [10,20]
…因为第一个处理程序得到两个承诺(1和2)的解析作为一个数组,然后创建一个新的数组,其中每一个乘以10并返回它.第二个处理程序得到第一个处理程序返回的内容