Promise
是 ES6 用来处理非同步的一种方法,至于是处理什么问题呢?
以 jQuery
来说 ajax
的非同步处理就有很多种,这就是第一点,非同步写法不一致
接下来用 jQuery
的 ajax
搭配 random user 的 api
来举例程式码过巢的问题:
$.ajax({ url: url}).done(function(res){ const seed = res.info.seed; console.log(seed); $.ajax({ url: `${url}?seed=${seed}` }).done(function(res2){ console.log(res2); });});
上述的程式码,在第一次抓取资料完成的时候,先捞取当笔资料的 seed,再把 seed 加上 url 来抓取同一笔资料
ps. 这个要阅读 random user 的 api
而这个动作只有捞取两次的资料,当要捞取无数笔的资料就会变成这样:
$.ajax({ url: url}).done(function(res){ const seed = res.info.seed; console.log(seed); $.ajax({ url: `${url}?seed=${seed}` }).done(function(res2){ console.log(res2); $.ajax({ ... }).done(function(){ $.ajax({ ... }).done(function(){ ... }); }); });});
有没有发现过巢的问题了? 何况还不易阅读,而且如果某几笔资料是要同时执行的时候,也无法。
Promise
的出现,就可以解决上述的问题,Promise
的文章 goolge 之后有很多种,这里直接简单扼要的说明Promise
在执行时会有一个等待期,之后就只会有两种结果,要马是成功(resolve)
,要马是失败(reject)
,成功的话就调用 .then()
失败则是使用 .catch()