如何构造JavaScript Promise?

如何构造JavaScript   Promise?
  Promise 是一个 ECMAScript 6 提供的类,目的是更加优雅地书写复杂的异步任务。
  
  由于 Promise 是 ES6 新增加的,所以一些旧的浏览器并不支持,苹果的 Safari 10 和 Windows 的 Edge 14 版本以上浏览器才开始支持 ES6 特性。
  
  构造 Promise
  
  现在我们新建一个 Promise 对象:
  
  new Promise(function (resolve, reject) {
  
  // 要做的事情...
  
  });
  
  通过新建一个 Promise 对象好像并没有看出它怎样 "更加优雅地书写复杂的异步任务"。我们之前遇到的异步任务都是一次异步,如果需要多次调用异步函数呢?例如,如果我想分三次输出字符串,第一次间隔 1 秒,第二次间隔 4 秒,第三次间隔 3 秒:
  
  实例
  
  setTimeout(function () {
  
  console.log("First");
  
  setTimeout(function () {
  
  console.log("Second");
  
  setTimeout(function () {
  
  console.log("Third");
  
  }, 3000);
  
  }, 4000);
  
  }, 1000);
  
  这段程序实现了这个功能,但是它是用 "函数瀑布" 来实现的。可想而知,在一个复杂的程序当中,用 "函数瀑布" 实现的程序无论是维护还是异常处理都是一件特别繁琐的事情,而且会让缩进格式变得非常冗赘。
  
  现在我们用 Promise 来实现同样的功能:
  
  实例
  
  new Promise(function (resolve, reject) {
  
  setTimeout(function () {
  
  console.log("First");
  
  resolve();
  
  }, 1000);
  
  }).then(function () {
  
  return new Promise(function (resolve, reject) {
  
  setTimeout(function () {
  
  console.log("Second");
  
  resolve();
  
  }, 4000);
  
  });
  
  }).then(function () {
  
  setTimeout(function () {
  
  console.log("Third");
  
  }, 3000);
  
  });
  
  这段代码较长,所以还不需要完全理解它,我想引起注意的是 Promise 将嵌套格式的代码变成了顺序格式的代码。

推荐阅读