[TOC]
Promise是一种异步操作的解决方案,将写法复杂的传统的回调函数和监听事件的异步操作,用同步代码的形式表达出来。
避免了多级异步操作的回调函数嵌套。 解决异步问题
promise 会将函数的状态暂停(凝聚,冻结)
promise不会直接触发,它会通过(then,catch)才会触发
1.触发promise的resolve状态,可以then函数去触发
2.触发reject状态,通过catch函数去触发
1.promise状态
- resolve — 处理成功的情况
- reject — 处理失败的情况
pending等待,冻结
1.触发promise的resolve状态,可以then函数去触发
2.触发reject状态,通过catch函数去触发<script> var p=new Promise((resolve,reject)=>{ // resolve(1); reject(2); }) p.then(res=>{ console.log(res); }).catch(err=>{ console.log(err); }) </script>
await
await 操作符用于等待一个 Promise 对象, 它只能在异步函数 async function 内部使用。
promise,async,await 异步的终极解决方案
var a = new Promise((resolve, reject) => { setTimeout(() => { resolve("http1") }, 2000) }) var b = new Promise((resolve, reject) => { setTimeout(() => { resolve("http2") }, 1000) }) /* 1.then 2.await 代码就会卡顿,promise执行完毕之后才会执行后面的代码 */ async function go(){ var res = await a; var sum = await b; console.log(res); console.log(sum); }
2.try: 可以将容易出错的代码(对缓存的操作如http请求,文件的上传/下载),
允许测试代码块中的错误
3.catch:捕获错误
<script> // 可以将容易出错的代码(对缓存的操作如http请求,文件的上传/下载) try{ alertt("http") }catch(err){ //捕获错误 console.log(err) } console.log("hello world") </script>
try …throw…catch
<script> var arr ="" // 可以将容易出错的代码(对缓存的操作如http请求,文件的上传/下载) try{ // alertt("http") if(Array.isArray(arr)){ console.log(arr.length) //捕获错误 }else{ throw "必须传入一个数组" } }catch(err){ console.log(err) } // console.log("hello world") /* throw可以自定义一个错误 ,*/ </script>
.promise 封装jquery-ajax
http.js部分
function http(){ return new Promise((resolve,reject)=>{ $.ajax({ url:"http://192.168.4.18:3000/top/playlist/?cat=华语", type:"get", success:res=>{ resolve(res) }, error:err=>{ reject(err) } }) }) }
html部分 ```javascript <!DOCTYPE html>
```