Подтвердить что ты не робот

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
});

Но это не похоже на правильный способ сделать это... Каков правильный подход к этому?

4b9b3361

Ответ 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

Узнайте больше: