4. promise.then()返回的新 promise的结果状态由什么决定?
(1)简单表达:由then()指定的回调函数执行的结果決定
(2)详细表达:
①如果抛出异常,新 promise变为 rejected, reason为抛出的异常
②如果返回的是非 promise的任意值,新 promise变为resolved,value为返回的值
③如果返回的是另一个新 promise,此 promise的结果就会成为新promise的结果
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>07_promise的几个关键问题3</title>
</head>
<body>
</body>
<script>
/*
4. promise.then()返回的新 promise的结果状态由什么决定?
(1)简单表达:由then()指定的回调函数执行的结果決定
(2)详细表达:
①如果抛出异常,新 promise变为 rejected, reason为抛出的异常
②如果返回的是非 promise的任意值,新 promise变为resolved,value为返回的值
③如果返回的是另一个新 promise,此 promise的结果就会成为新promise的结果
*/
new Promise((resolve, reject) => {
resolve(1)
}).then(
value => {
console.log('onResolved1()', value)// onResolved1() 1
},
reason => {
console.log('onRejected1()', reason)
}
).then(
value => {
console.log('onResolved2()', value)// onResolved2() undefined
},
reason => {
console.log('onRejected2()', reason)
}
)
//----------------------------------------------------------------------------------
new Promise((resolve, reject) => {
reject(1)
}).then(
value => {
console.log('onResolved1()', value)
},
reason => {
console.log('onRejected1()', reason)// onRejected1() 1
}
).then(
value => {
console.log('onResolved2()', value)// onResolved2() undefined
},
reason => {
console.log('onRejected2()', reason)
}
)
//----------------------------------------------------------------------------------
//①如果抛出异常,新 promise变为 rejected, reason为抛出的异常
new Promise((resolve, reject) => {
resolve(1)
}).then(
value => {
console.log('onResolved1()', value)// onResolved1() 1
throw '错误'
},
reason => {
console.log('onRejected1()', reason)
}
).then(
value => {
console.log('onResolved2()', value)
},
reason => {
console.log('onRejected2()', reason)// onRejected2() 错误
}
)
//----------------------------------------------------------------------------------
//②如果返回的是非 promise的任意值,新 promise变为resolved,value为返回的值
new Promise((resolve, reject) => {
resolve(1)
}).then(
value => {
console.log('onResolved1()', value)// onResolved1() 1
return 'xyz'
},
reason => {
console.log('onRejected1()', reason)
}
).then(
value => {
console.log('onResolved2()', value)// onResolved2() xyz
},
reason => {
console.log('onRejected2()', reason)
}
)
//----------------------------------------------------------------------------------
// ③如果返回的是另一个新 promise,此 promise的结果就会成为新promise的结果
new Promise((resolve, reject) => {
resolve(1)
}).then(
value => {
console.log('onResolved1()', value)// onResolved1() 1
return Promise.resolve('此 promise的结果就会成为新promise的结果')
},
reason => {
console.log('onRejected1()', reason)
}
).then(
value => {
console.log('onResolved2()', value)//onResolved2() promise的结果就会成为新promise的结果
},
reason => {
console.log('onRejected2()', reason)
}
)
</script>
</html>