promise对象

来源:互联网 发布:数据库模型图pk 编辑:程序博客网 时间:2024/05/18 11:03

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

const promise = new Promise(function(resolve,reject){    console.log('我在promise');    resolve('我是promise返回的值')});执行结果:我在promise

加一条语句

console.log(promise);执行结果我在promisePromise { '我是promise返回的值' }

再加一条语句代码成为:

const promise = new Promise(function(resolve,reject){    console.log('我在promise');    resolve('我是promise返回的值')});//下面一条语句异步执行promise.then(console.log)console.log(promise);执行结果:我在promisePromise { '我是promise返回的值' }我是promise返回的值

注意到then传进去的函数异步执行了,而新建的Promise对象立即执行。

再加一些代码:

const promise = new Promise(function(resolve,reject){    console.log('我在promise');    let i = 0    resolve('我是promise返回的值'+i);    i+=1;    console.log(i);});//下面一条语句异步执行promise.then(console.log)console.log(promise);执行结果:我在promise1Promise { '我是promise返回的值0' }我是promise返回的值0

上面代码说明resolve函数的异步操作,并不会影响接下来的计算。参数传递也是传值。

2.promise的方法
1. Promise.prototype.then(resolve, reject),函数的第一个参数为resolve函数,第二个参数为rejected函数,then函数返回一个新的promise对象,因此then函数后面可以接then函数。

let promise2 = promise.then(console.log)//Promise { <pending> }
  1. Promise.prototype.catch(reject);相当于Promise.prototype.then(null, reject)
et pro = new Promise(function(resolve,reject){    throw new Error('Promise1');    //resolve('ok');});pro.then((data)=>{    console.log(data);  //  throw new Error('Promise2');}).catch(err=>{    console.log(err);})

错误一直向下传递,catch可以捕获前面多个Promise对象的错误。但promise的状态不可逆,即如果调用resolve,就不能再被rejected捕捉到哦!
如果pomise发出的错误没有被下面的catch捕捉到,则‘错误被promise吃掉’,即不会再运行时抛出异常。