欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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 就是一个花瓶。中看!!