Promise笔记
<script>
/* Promise面试题
*/
// 1.基本的Promise面试题
const promsie = new Promise((resolve, reject) => {
console.log(1)
resolve()
console.log(2)
})
promsie.then(() => {
console.log(3)
})
console.log(4)
/* 执行顺序 1243 */
// 2.promise的状态
const promise1 = new Promise((resolve, reject) => {
setTimeout(() => {
resolve('success')
}, 1000)
})
const promise2 = promise1.then(() => {
return new Error('报错')
})
console.log(promise1)
console.log(promise2)
setTimeout(() => {
console.log('promsie1', promise1)
console.log('promsie2', promise2)
}, 2000)
/* 注意时间与return pp */
// 3.Promise的状态的固化
const p1 = new Promise((resolve, reject) => {
resolve('success1')
reject('error')
resolve('success2')
})
p1.then((res) => {
console.log('then', res)
}).catch((error) => {
console.log('catch', err)
})
// 这里的针对promoise的固化 success1 就不会走下面的reject
// 4.Promise的catch一般放在最后一定会执行,不然没有throw报错是不会执行catch的
Promise.resovele(1)
.then((res) => {
console.log(res)
return 2
})
.catch((err) => {
return 3
})
.then((res) => {
console.log(res)
})
/* 12 */
// 4.Promise 的执行同步任务的时间点是否相同
const p1 = new Promsie((resolve, reject) => {
setTimeout(() => {
console.log('once')
resolve('success')
}, 1000)
})
const start = Date.now()
p1.then((res) => {
console.log(res, Date.now - start)
})
p1.then((res) => {
console.log(res, Date.now - start)
})
/* 1001 1001 */
// 5.针对 return和throw的报错是否会执行.catch
Promise.resolve()
.then(() => {
return new Error('error')
})
.then((res) => {
console.log('then', res)
})
.catch((err) => {
console.log('catch', err)
})
/* new Error('error') */
// 6.Promise的引用类型错误,不能在.then中不能返回本身
const p1 = Promise.resolve().then(() => {
return p1
})
p1.catch(console.log(1))
/* Type Error */
// 7.Promise针对.then的参数的问题
Promise.resolve(2).then(3).then(Promise.resolve(4)).then(console.log)
/* 2 */
// 8.Promise和Node一起考的时候
process.nextTick(() => {
console.log('nextTick', 1)
})
Promise.resolve().then(() => {
console.log('then', 2)
})
setImmediate(() => {
console.log('setImmediate', 3)
})
console.log('end', 4)
/* 4123 */
// 9.Promise的通常题
var p1 = new Promise((resolve, reject) => {
resolve(1)
})
p1.then((value) => {
console.log(value) //1
return value * 2
})
.then((val) => {
console.log(val)
})
.then((val) => {
console.log(val)
return Promise.resolve('resolve')
})
.then(
(val) => {
console.log(val)
},
(err) => {
console.log('reject', err)
}
)
/* 1 2 undefined resolve reject */
// 10. Promise的 resolve
var p1 = Promise.resolve(1)
var p2 = Promise.resolve(p1)
var p3 = new Promise((resolve, reject) => {
resolve(1)
})
var p4 = new Promise((resolve, reject) => {
reject(p1)
})
console.log(p1 === p2)
console.log(p1 === p3)
console.log(p1 === p4)
console.log(p3 === p4)
/* true false false false */
</script>
总结:Promise考点
1.Promise固化只有一次,其他固化不执行,除固化代码还会执行
2.Promise状态 的return Error("xxx")不会执行.catch 只有throw Error("xxx")会执行.catch
3..Promise固化只有一次
4.Promise的catch一般放在最后,要有throw报错才会执行.catch的
5.Promise 的执行同步任务的时间点是相同的
6.Promise的引用类型错误,不能在.then中不能返回本身
7.Promise针对.then的参数的问题
Promise.resolve(2).then(3).then(Promise.resolve(4)).then(console.log)
其中 .then(3).then(Promise.resolve(4)) 都是不执行的
8.Promise和Node一起考的时候 针对的是node和Promise的轮询
process.nextTick(() => {
console.log('nextTick', 1)
})
Promise.resolve().then(() => {
console.log('then', 2)
})
setImmediate(() => {
console.log('setImmediate', 3)
})
console.log('end', 4)
/* 4123 */
9.Promise的通常题 针对.then 没有进行return 的下次.then的值为undefined
10.Promise的 resolve
var p1 = Promise.resolve(1)
var p2 = Promise.resolve(p1)
p1 === p2 指向同一指针

浙公网安备 33010602011771号