Promise.all(). Then() решить?
Использование Node 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
});
Но это не похоже на правильный способ сделать это... Каков правильный подход к этому?
Ответы
Ответ 1
Но это не похоже на правильный способ сделать это..
Это действительно правильный способ сделать это (или, по крайней мере, правильный способ сделать это). Это ключевой аспект обещаний, они представляют собой конвейер, и данные могут обрабатываться различными обработчиками в конвейере.
Пример:
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);
});
Ответ 2
Сегодня NodeJS поддерживает новый синтаксис async/await
. Это простой синтаксис, облегчающий жизнь
async process() { // must be an async function
var x=Promises.all(promises); // now x will be an array
x=x.map (tmp=>tmp+1); // proccessing the data. No need to .then
}
process().catch(err=>{throw new Error(err)}) // In case of error throw it
Узнайте больше: