当前位置: 移动技术网 > IT编程>开发语言>JavaScript > Promise 学习心得

Promise 学习心得

2019年08月02日  | 移动技术网IT编程  | 我要评论

  当了这么久码农到今天没事才开始去深究 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 就是一个花瓶。中看!!

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网