Node的出现大大推动了js这门语言在后台的发展,接触过Node的人都知道,Node是以异步(Async)回调著称的,虽然异步带来了程序的高执行效率,但同时也减少了程序的可读性。
如果我们有几个异步操作,并且后一个操作需要前一个操作返回的数据才能执行,这样按照Node的一般执行规律,要实现有序的异步操作,通常是一层加一层嵌套下去(上层结束有返回时执行下一步)。
为了解决这个问题,ES6提出了Promise
的实现。
promise
含义:答应去做,还没去做
状态:pending/fulfilled/reject
作用:解决回调地狱
使用步骤:
- 创建promise对象
Var p = new Promise(function(resolve, reject){
if(成功){
resolve;
}else{
reject; //失败
}
});
+ 调用:对象.than;
解释:promise对象一旦被创建,即对应为pending状态(等待),执行then,执行成功状态变为fulfilled,调用resolve的回调方法,反之状态变为reject,调用reject函数。
then
每次then方法都会得到对应promise对象,且可以无限调用。相连then方法可接受上一步返回值。
所以我们可以用链式then来代替之前提到的嵌套。
catch
用以捕捉链式then中的错误,注意,会中断错误点后续then方法。
使用$.ajax中的promise方法
补充:今天学到了一个三点表达式,
var a = [1,2,3,4,5];
var b = [..a, 'a','b'];
Console.log(b) //1,2,3,4,5,'a','b'
比较简明就不多做解释了,另外三点在结合数组传参时可能有奇效。