21、promise.then()返回的新promise对象的结果状态由什么决定?
let p = new Promise((ressolve, reject) => {
resolve("OK")
})
let result = p.then(value =>{
console.log(value)
}, reason => {
console.warn(reason)
})
console.log(resilt)
简单表述:由then()指定的回调函数执行的结果决定
如果抛出异常,新promise变为rejected, reason为抛出的异常
如果返回的是非promise的任意值,新promise变为resolved, value为返回的值
如果返回的事另一个新promise, 此promise的结果就会成为新promise的结果
22、串联多个任务
promise如何串联多个操作任务
- promise的then()返回一个新的promise,可以开成then()的链式调用
- 通过then的链式调用串联多个同步/异步任务
let p = new Promise((resolve, reject) => {
setTimeout(() => {
resolve("OK")
},1000)
p.then(value => {
return new Promise((resolve, reject) => {
resolve("success")
})
}).then(value=>{
console.log(value)
}).then(value => {
console.log(value)
})
})
23、promise异常穿透
- 当使用promise的then链式调用时,可以再最后指定失败的回调
- 前面任何操作出了异常,都会穿到最后失败的回调中处理
let p = new Promise((resolve, reject) => {
setTimeout(() => {
resolve("OK")
},1000)
p.then(value => {
console.log(111)
}).then(value=>{
console.log(222)
}).then(value => {
console.log(333)
}).catch(reason => {
console.warn(reason)
})
})
24、如何中断promise链
有且只有一个方法,返回一个pending状态的promise对象
let p = new Promise((resolve, reject) => {
setTimeout(() => {
resolve("OK")
},1000)
p.then(value => {
console.log(111)
return new Promise(() => {})
}).then(value=>{
console.log(222)
}).then(value => {
console.log(333)
}).catch(reason => {
console.warn(reason)
})
})