Edit in JSFiddle

// 비동기 작업을 흉내내며 Promise 객체를 반환하는 함수
function incrementAsync(num){
  return new Promise(function(resolve, reject){
    setTimeout(function(){
      resolve(num + 1);
    }, 1000);
  });
};

// Promise에 콜백 연결하기
incrementAsync(0)
  .then(incrementAsync)
  .then(incrementAsync)
  .then(incrementAsync)
  .then(incrementAsync)
  .then(function(result){ // 5초 후 실행
    document.write("<h1>First promise says " + result +"</h1>");
  });

// Promise.all로 콜백 병렬로 연결하기
Promise
  .all([
    incrementAsync(0),
    incrementAsync(1),
    incrementAsync(2),
    incrementAsync(3),
  ])
  .then(function(results){ // 1초 후 실행
    return Promise.all([
      incrementAsync(results[0]+results[1]),
      incrementAsync(results[1]+results[2])
    ]);
  })
  .then(function(results){ // 2초 후 실행
    document.write("<h1>Second promise says " + (results[0]+results[1]) +"</h1>");
  });

document.write("<h1>Promises are pending...</h1>");