博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
promise
阅读量:3923 次
发布时间:2019-05-23

本文共 4105 字,大约阅读时间需要 13 分钟。

1.promise:承诺的意思。(状态一旦设定,不能改变)。

Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。

通过new构造函数创建promise对象,构造函数的参数里面又有一个函数参数,这个函数函数里面又有两个参数(resolve,reject),一个代表成功的回调,一个是失败的回调。

2.Promise对象有以下两个特点。

对象的状态不受外界影响。Promise对象代表一个异步操作,有三种状态:pending(进行中)、fulfilled(已成功)和rejected(已失败)。

一旦状态改变,就不会再变,任何时候都可以得到这个结果。Promise对象的状态改变,只有两种可能:从pending变为fulfilled和从pending变为rejected。

pending变为fulfilled -->resolve
pending变为rejected -->reject

  • 实例方法的前面一定是promise对象。
  • 实例方法(Promise.prototype.then/Promise.prototype.catch)分开写。
let promise = new Promise((resolve, reject) => {
resolve();//函数对象,解决,成功 --成功的回调 }); //实例方法的前面一定是promise对象。 //实例方法(Promise.prototype.then/Promise.prototype.catch)分开写。 promise.then(() => {
//成功的回调,函数做参数 console.log('成功'); });
let promise = new Promise((resolve, reject) => {
reject();//函数对象,未解决,失败 --失败的回调 }); //实例方法的前面一定是promise对象。 //实例方法(Promise.prototype.then/Promise.prototype.catch)分开写。 promise.catch(() => {
//失败的回调,函数做参数 console.log('失败'); });

实例方法(Promise.prototype.then/Promise.prototype.catch)链式调用。

let promise = new Promise((resolve, reject) => {
resolve();//函数对象,解决,成功 --成功的回调 reject();//函数对象,未解决,失败 --失败的回调 }); promise.then(() => {
console.log('成功1'); }).catch(() => {
console.log('失败1'); })

实例方法(Promise.prototype.then/Promise.prototype.catch)简写。

let promise = new Promise((resolve, reject) => {
resolve();//函数对象,解决,成功 --成功的回调 reject();//函数对象,未解决,失败 --失败的回调 }); promise.then(() => {
成功的回调,函数做参数 console.log('成功2'); }, () => {
//失败的回调,函数做参数 console.log('失败2'); });

3.promise的结构

let promise = new Promise((resolve, reject) => {
resolve('我是成功的状态');//这里的参数传给then里面的函数 //reject('我是失败的状态');//这里的参数传给catch里面的函数 }); promise.then((d) => {
console.log(d);//我是成功的状态 }).catch((err) => {
//console.log(err);//我是失败的状态 });

4.promise 多个then链式操作

let promise = new Promise((resolve, reject) => {
resolve('我是成功的状态');//这里的参数传给then里面的函数 //reject('我是失败的状态');//这里的参数传给catch里面的函数 }); promise .then((d) => {
console.log(d);//我是成功的状态 }) .then(() => {
console.log(1); }) .then(() => {
console.log(2); }) .catch((err) => {
console.log(err);//我是失败的状态 });

4.promise 下面的两个静态方法

Promise.all([ ]):

用于将多个 Promise实例,包装成一个新的 Promise 实例。
Promise.all()方法接受一个数组作为参数
只有数组的里面的每一个状态都是resolve,则新的promise实例的状态才会变成resolve.(才可以调用新的promise实例下面的then),其他的情况都是失败

let p1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('任务1'); }, 2000) }); let p2 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('任务2'); }, 1000); }); let p3 = new Promise((resolve, reject) => {
resolve('任务3'); }); let newpromise = Promise.all([p1, p2, p3]);//包装成一个新的 Promise 实例 newpromise.then((data) => {
console.log(data);//["任务1", "任务2", "任务3"] 同时请求多个接口。 }).catch(() => {
console.log('状态是失败的'); });

Promise.race([ ]):

Promise.race()方法同样是将多个 Promise 实例,包装成一个新的 Promise 实例。
race指的是任务快的先执行,其他延迟的任务后续执行。

let p1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('任务1'); }, 2000) }); let p2 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('任务2'); }, 1000); }); let p3 = new Promise((resolve, reject) => {
resolve('任务3'); }); let newpromise = Promise.race([p1, p2, p3]);//包装成一个新的 Promise 实例 newpromise.then((data) => {
console.log(data);//任务三 }).catch(() => {
console.log('状态是失败的'); });

转载地址:http://ygkgn.baihongyu.com/

你可能感兴趣的文章
指针变量的运算
查看>>
蓝牙模块在HHARM2410上的移植
查看>>
linux环境变量文件
查看>>
守护进程
查看>>
glib 中 IO Channels 理解
查看>>
[linux]警告:检测到时钟错误。您的创建可能是不完整的。
查看>>
动态库的Makefile.am编写
查看>>
蓝牙1.1、蓝牙1.2、蓝牙2.0的关键区别
查看>>
循环队列操作实现
查看>>
linux的信号
查看>>
glib 中 IO Channels 理解
查看>>
C++中extern “C”含义深层探索
查看>>
extern用法详解(转)
查看>>
如何在Linux下用C/C++语言操作数据库sqlite3
查看>>
SQLite的数据类型
查看>>
使用sqlite3与C接口开发数据库程序 - [编程]
查看>>
Sqlite日期和时间函数不求人
查看>>
在SQLite中使用索引优化查询速度
查看>>
标准C处理类似INI配置文件的键值型文档
查看>>
配置文件的读取,纯C代码
查看>>