(关于promise,以前并不知道是什么,没这个概念。现在来学习总结下)
es6的异步编程解决方案。需要new新对象操作api。
有3中状态:pending(进行中)、fulfilled(已完成)、rejected(已失效),异步操作才有的状态。
2种状态的改变结果,称为:已定型(resolve):
即可将异步操作变为同步操作,避免层层嵌套回调函数。
promise缺点:
对象创建后会立即执行,中途不可中断。
不设置回调时,将抛出异常,不影响外部执行。
使用方法:
resolve作用:pending-->resolved 传参:异步成功的data
reject作用:pending-->rejected 传参:error对象
若a=true;就会进resolve()函数,then中将会进data
若a=false;就会进reject()函数,then中将会进err。
对象.then()
log输出顺序:1 3 2
new之后直接.then()
log输出顺序:2 1
直接return resolve(),就只执行回调,后面的不再执行。
因为前面return了 所以只会输出1
异步加载图片:
若图片路径存在,则输出value为img对象
若图片路径不存在或错误,则输出err为Error 加载失败
异步操作ajax:
json数据:
getJson函数带上参数url,可以返回该json数据。
若获取到数据,返回数据;
若访问不到数据,进入then的error,打印:
Error at XMLHttpRequest.xhr.onreadystatechange
调用getJson(url),then中成功则进data,失败则进err。
创建一个promise的ajax
创建多重异步(2个then,第2个getJson使用return):
结果:
这个是简洁版本:
结果是一样的(两重异步):
Network中:
一句:别让自己的努力只是感动了自己。
----公众号:海瑞菌