美文网首页
学习过程中,总结Promise的一些知识

学习过程中,总结Promise的一些知识

作者: inyourface | 来源:发表于2021-01-22 11:13 被阅读0次

1.Promise定义

(1)Promise是用来封装一个异步操作并可以获取其结果的构造函数;
(2)Promise是异步编程的解决方案,里面保存着未来才会结束的事件的结果;
(3)Promise有3中状态:pending:初始化状态;fullfilled:成功状态;rejected:失败状态;

2.用法

Promise的构造函数接收一个参数,是函数,并且传入两个参数:resolve,reject,分别表示异步操作执行成功后的回调函数和异步操作执行失败后的回调函数。

function test(){
  var p = new Promise(function (resolve, reject) {
    //做一些异步操作
    setTimeout(function(){
      console.log('执行完成')
      resolve('数据')
    },2000)
  }
  return p;
}
test().then(function(data){
console.log(data)//data就是resolve中传过来的数据 
})

3.Promise.then()

在then()方法中,可以接受两个函数参数,第一个value,第二个reason。

  •          如果抛出异常: 新promise变为rejected,reason为抛出的异常
    
  •          如果返回的是非promise的任意值,新promise变为resolved,value为返回的值
    
  •          如果返回的是另一个新promise,此promise的结果就会成为新promise的结果
    
 new Promise((resolve, reject) => {
  resolve(1)
  //reject(2)
}).then(
  value => {
    console.log('onResolved', value)
  },
  reason => {
    console.log('onRejected', reason)
  }
)

在then()方法中,可以直接return数据,也可以是Promise对象,如果是直接返回数据,那么在后面的then中就可以接收数据

test().then(function(data){
  console.log(data)
  return test1()
}).then(function(data){
  console.log(data)
  return '直接返回数据'
}).then(function(data){
  console.log(data)//打印“直接返回数据”
})

catch用法

对抛出的异常进行处理

test().then(function(data){
  console.log('resolved')
})
.catch(function(reason){
  consolve.log(reason)
})

all用法

all方法提供了并行执行异步操作的能力,并且在所有异步操作执行完后才执行回调。all接收一个数组参数,里面的值最终都是返回promise对象。当数组中的所有promise都为resolve时才成功,有reject回调执行或输入不合法的promise就会立即抛出错误。

const promise1 = Promise.resolve(3);
const promise2 = 42;
const promise3 = new Promise((resolve, reject) => {
  setTimeout(resolve, 100, 'foo');
});

Promise.all([promise1, promise2, promise3]).then((values) => {
  console.log(values);
});

race用法

race 函数返回一个 Promise,它将与第一个传递的 promise 相同的完成方式被完成(参数中第一个执行完的promise的返回状态就是race的返回状态)。它可以是完成( resolves),也可以是失败(rejects),这要取决于第一个完成的方式是两个中的哪个。
例如:进行图片的请求

//请求某个图片资源
function requestImg(){
    var p = new Promise(function(resolve, reject){
        var img = new Image();
        img.onload = function(){
            resolve(img);
        }
        img.src = 'xxxxxx';
    });
    return p;
}

//延时函数,用于给请求计时
function timeout(){
    var p = new Promise(function(resolve, reject){
        setTimeout(function(){
            reject('图片请求超时');
        }, 5000);
    });
    return p;
}

Promise
.race([requestImg(), timeout()])
.then(function(results){
    console.log(results);
})
.catch(function(reason){
    console.log(reason);
});

requestImg()请求图片肯定不会成功,timeout函数是一个延时5秒的异步操作。当两个返回promise对象的函数放进race中,它俩就会赛跑,5秒内图片成功请求,那就进入then方法,执行正常流程,5秒内不成功,进入timeout中执行。

相关文章

  • 学习过程中,总结Promise的一些知识

    1.Promise定义 (1)Promise是用来封装一个异步操作并可以获取其结果的构造函数;(2)Promise...

  • Promise知识总结

    本文目录: 1.什么是回调函数?回调函数有什么缺点 2.Promise是什么,可以手写实现一下吗 3.手写简单版的...

  • Vue学习笔记

    最近在学习Vue,下面是学习过程中总结了一些基本的知识点 Vue 一. 基本知识 1. 实例化 2. 过滤器 {{...

  • 『ES6知识点总结』Promise

    『ES6知识点总结』Promise 文本主要内容如下: * Promise是什么? * 1.1 特点: * 1.2...

  • 啊懒人跟着李南江学习HTML5—项目总结

    首先、这篇项目总结是跟着视频学习这么久后,对前面一些知识点的总结,在敲的过程中也碰到很多问题,由于平常学习视频都是...

  • es6 Promise对象

    本文是本人学习时遇到Promise后,在网上查询资料及总结后的学习笔记。 什么是Promise? 看看MDN的定义...

  • Promise学习总结

    了解promise诞生的历史背景 1.词语本意解释 promise [ˈprɑ:mɪs] 许诺;允诺;(有可能)从...

  • 手写promise

    本章节纯粹是对promise手写实现。如果不了解promise自行了解再来学习本章知识。promise初体验首先,...

  • Promise学习笔记

    前言 一直想写一篇关于promise的文来总结一下之前零零散散的promise知识点,趁着工作闲暇,来做个总结。P...

  • 宝妈须知,你不知道的育儿小知识!

    很多爸妈在育儿过程中总结了很多相关知识,有实用小知识也有一些冷知识,我也整理了一些爸爸妈妈的育儿小总结,给各位宝爸...

网友评论

      本文标题:学习过程中,总结Promise的一些知识

      本文链接:https://www.haomeiwen.com/subject/tpfszktx.html