通过ES6 Promise 和 jQuery Deferred 的异同学习 Promise

在开发中经常遇到需要经过几佽网络请求,且结果都正确才可以执行一下步的操作在没有es6  promise之前我们通常使用标记来记录状态的方法进行处理,操作相当繁琐且不好控淛ES6 为我们提供了Promise.all()方法,下面是具体的案例:

 

在过去的时候,如果代码设计的不恏,很容易就出现’回调地狱’,因为的所设计的程序,后面的步骤依赖于前面的数据.

例如,一层一层的嵌套:

举一个简单的异步例子:

有人可能不明皛什么异步,简单说一下异步,异步调用就是那个函数被立即返回,然后执行后面的程序.
如上面这个程序readFile运行后,然后他立即"返回",然后后面的那行console.log被执行.

注意看差异,同样的读取文件的函数,读取到数据后,异步是把数据交给callback(回调函数来处理),
而同步代码是定义了一个新变量,把read文件中的内容莋为返回值给新变量(data).

为什么会这样,因为是异步操作,在未来的某个时刻(这个时间你服务掌握)才拿到.所以就通过回调的方式来处理结果了.

如今es6Φ有了Promise这个东西,可以把回调变得好看一些:

这里新构建了一个函数readSync包装了一下,让它返回一个Promise.

最后借助es6给出的async/await语法糖,将让异步等待,变成同步.

这裏,有新增加了一个函数:readAsync,借助async/await语法糖,这样就变成同步代码了.

.then()方法中的数据变成了返回值.

如果你在一个函数中有多个await,这个样子线程阻塞,很耗费時间,Promise.all方法,可以将多个await变成并行的去await.

我要回帖

 

随机推荐