基本语法:
const p2 = new Promise(function (resolve, reject) {
})
console.log(p2);
//[[Prototype]]: Promise
//[[PromiseState]]: "pending"
//[[PromiseResult]]: undefined
pormise的状态有三种:1.pending等待 2.fulfilled成功 3.rejected失败
当调用resolve函数的时候,状态就会变为fulfilled,会执行then这个方法,并且还会把参数传给res1
当调用reject函数的时候,状态就会变为rejected,会执行catch这个方法,并且还会把参数传给res2
const p1 = new Promise(function (resolve, reject) {
// resolve({ name: '小芳' })
reject([20, 32, 21, 56])
})
p1.then(function (res1) {
console.log('成功', res1)
}).catch(function (res2) {
console.log('失败', res2)
}).finally(function () {
console.log('默认会执行的函数')
})
console.log(p1);
.then里面可以写两个函数,第一个是成功会执行的函数,第二个是失败会执行的函数
<script>
const p1 = new Promise(function (resolve, reject) {
// resolve({ name: '小芳' })
reject([20, 32, 21, 56])
})
p1.then(function (ok) {
console.log('成功', ok)
}, function (err) {
console.log('失败', err)
})
</script>
var p1 = new Promise(()=>{});
var p2 = p1.then(function f_ok(){}, function f_err(){});
// p2也是一个promise对象。
console.log(p1 === p2); // false
then的返回值p2的状态和值该如何确定呢?
- 如果p1的状态是pending,则p2的状态也是pending。
- 如果p1的状态是resolved,then()会去执行f_ok,则p2的状态由f_ok的返回值决定。
-
- 如果f_ok返回值不是promise对象,则p2的状态是resolved,且p2的promiseValue就是f_ok函数的return值。
- 如果f_ok返回值是一个promise对象,则p2的状态及promiseValue以这个promise对象为准。
- 如果f_ok这个函数内部发生了错误(或者是用户主动抛出错误),则p2的状态是rejected,且p2的promiseValue就是这个错误对象。
- 如果p1的状态是rejected,then()会去执行f_err,则p2的状态由f_err的返回值决定。
-
- 如果f_err返回值不是promise对象,则p2的状态是resolved,且p2的promiseValue就是f_err函数的return值。
- 如果f_err返回值是一个promise对象,则p2的状态及promiseValue以这个promise对象为准。
- 如果f_err这个函数内部发生了错误(或者是用户主动抛出错误),则p2的状态是rejected,且p2的promiseValue就是这个错误对象。