Promise 学习心得
程序员文章站
2022-07-03 18:42:22
当了这么久码农到今天没事才开始去深究 Promise 这个对象 什么是 Promise, Promise 有什么用? 在写代码的时候多多少少都有遇见过地狱式的回调 代码看起来没问题就是有点乱,Promise 这个东西就是为了解决回调嵌套而生的 Promise 是异步编程的一种解决方案:从语法上讲,p ......
当了这么久码农到今天没事才开始去深究 promise 这个对象
- 什么是 promise, promise 有什么用?
在写代码的时候多多少少都有遇见过地狱式的回调 代码看起来没问题就是有点乱,promise 这个东西就是为了解决回调嵌套而生的 promise 是异步编程的一种解决方案:从语法上讲,promise是一个对象,从它可以获取异步操作的消息;从本意上讲,它是承诺,承诺它过一段时间会给你一个结果。promise有三种状态:pending(等待态),fulfiled(成功态),rejected(失败态);状态一旦改变,就不会再变。创造promise实例后,它会立即执行。
- 知道 promise ,那应该怎样用呢?
举个最简单的例子利用 jquery 返回一个 promise 对象,实现 .then 对 ajax 进行调用
1 function getdata(path,type='get',datatype='json'){ 2 return $.ajax({ 3 url:path, 4 type:type, 5 datatype:datatype 6 }) 7 }
那如果我用不了 jquery 怎么办, 我们可以直接用原生 promise 来实现
1 function getdata(url) { 2 return new promise(function (resolve, reject) { 3 var xhr =new xmlhttprequest() ; 5 xhr.onreadystatechange = function () { 7 if (xhr.readystate == 4) { 8 if ((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304) { 9 try { 11 var response = json.parse(xhr.responsetext); 12 resolve(response); 13 } catch (e) { 14 reject(e); 15 } 16 } else { 17 reject(new error("request was unsuccessful: " + xhr.statustext)); 18 } 19 } 20 } 21 xhr.open('get', url , true); 22 xhr.send(null); 23 }) 24 }
- 最后我们来说一下 promise 正常场景的两种使用方法
1. 回调后调用函数,第一个函数报错后面的函数就可以不用执行。
1 getdata('./data.json',).then((data)=>{ 2 console.log(data) 3 getdata('./data1.json',) 4 }).then(data=>{ 5 console.log(data) 6 getdata('./data2.json',) 7 }).then(data=>{ 8 console.log(data) 9 }).catch(err=>{ 10 console.log(err) 11 })
2. 回调后调用函数,第一个函数错误后后面的函数还要继续执行。
1 getdata('./data.json',).then((data)=>{ 2 console.log(data) 3 getdata('./data1.json',) 4 }).catch(err=>{ 5 console.log(err) 7 getdata('./data1.json',) 8 }).then(data=>{ 9 console.log(data) 10 getdata('./data2.json',) 11 }).then(data=>{ 12 console.log(data) 13 })
总的来说 promise 有什么用呢?代码量没减少,写起来还复杂。 你可以这样认为 promise 没啥用就是让你的代码看起来不那么别扭,没有了回调地狱让你的代码可读写更强,看起来心情更好,心情好代码就打的快,代码打的快就有时间去学习,有时间学习就可以跳槽,就加工资。简单说 promise 就是一个花瓶。中看!!