Promise 是异步编程的一种解决方案,比传统的解决方案——回调函数和事件——更合理和更强大。它由社区最早提出和实现,ES6 将其写进了语言标准,统一了用法,原生提供了
Promise
对象
ES6 规定,
Promise
对象是一个构造函数,用来生成
Promise
实例。
我们先来看看它的使用方法:
1 const promise = new Promise(function(resolve, reject) { 2 // ... some code 这里写异步操作代码 3 ajax(api1,function(res){ 4 // 异步操作成功,请求数据成功 5 resolve(value);//将promise设置为resolved(完成状态) 6 },function(error){ 7 // 异步操作失败,请求数据失败 8 reject(error);////将promise设置为rejected (失败状态) 9 }) 10 11 });
resolve
函数的作用是 在异步操作成功时调用,并将异步操作的结果,作为参数传递出去;
reject
函数的作用是 在异步操作失败时调用,并将异步操作报出的错误,作为参数传递出去
Promise
实例生成以后,可以用
then
方法分别指定
resolved
状态和
rejected
状态的回调函数。
promise.then(function(value) { // success }, function(error) { // failure });
then
方法可以接受两个回调函数作为参数。第一个回调函数是Promise
对象的状态变为resolved
时调用,第二个回调函数是Promise
对象的状态变为rejected
时调用。其中,第二个函数是可选的,不一定要提供。这两个函数都接受Promise
对象传出的值作为参数。
promise.then(function(value) { // success }).catch(function(error){ //error })
promise.then(function(value) { // success ajax(api2,function(res){ }) }).catch(function(error){ //error })
像是这样 new Promise(ajax1).then(ajax2).catch() ,使用了链式调用代替了嵌套结构,这样就避免了层层嵌套使的代码可读性太差!