片段1
<script>
var p1 = new Promise(function(resolve, reject) {
resolve(1)
})
var p2 = Promise.reject(2)
// 异步1
p2.then(function(value) {
console.log('doo1')
}, reason => {
setTimeout(function() {
console.log('doo111111111111111') // [最后]
}, 2000)
console.log('doo11') // [1]
}).then(value => {
console.log('doo1111') // [4]
}, value => {
console.log('doo111')
}).then(value => {
console.log('doo11111') // [6]
}, value => {
console.log('doo111111')
})
// 异步2
p2.catch(function(reason) {
console.log('catch()' + reason) // [2]
// return Promise.reject()
}).then(value => {
console.log('doo0') // [5]
}, value => {
console.log('doo00')
})
// 异步3
p2.then(function(value) {
console.log('doo2')
}, reason => {
console.log('doo22') // [3]
})
// Promise.all([p1, p2]).then(function(value) {
// console.log('onResolved()' + value)
// }, function(reason) {
// console.log('onRejected()' + reason)
// })
</script>
异步1 异步2 异步3这个3组链式调用,是并行调用的,彼此之间不关联。
片段2
<script>
var p1 = new Promise(function(resolve, reject) {
resolve('Rick')
})
setTimeout(() => {
p1.then(value => {
console.log('hello: ' + value) // 后指定回调函数
})
}, 1000)
</script>
可以在resolve
之后,再声明then
片段3
<script>
console.log('-----------')
var p = Promise.reject(100)
p.then(value => {}, reason => {
console.log('---onRejected: ' + reason)
}).catch(error => {
console.log('---catch: ' + error) // 被then中的onRejected处理,catch就不会再执行
})
p.then(value => {}).catch(error => {
console.log('---22222222catch: ' + error) // catch会再执行
})
</script>
如果在then
中的oneRejected
中处理了,就不会在catch
中处理了。处理后,不抛出异常或rejected,下一个then
将会执行onResolved