Promise的局限性(你不知道的JavaScript)
- 顺序错误处理,利用异常值传透,可以在最后补货错误。很多时候没有为Promise链序列的中间步骤保留的引用,因此没有这样的引用,无法错误关联错误处理函数来可靠地确定错误。
- 单一值:promise只能有一个完成值或者一个拒绝的理由,在复杂的场景中,这是一种局限。
解决方法:1)分裂值:将两个异步结果包装成数组,再利用Promise.all方法
- 单决议:应用场景:获取button点击事件产生的数据,由于单决议的特点(resolve/reject函数只运行一次),要想利用Promise控制数据流只能让每次点击的时候重新生成一个promise
cosnt p = new Promise((resolve, reject)=>{
click("#btn", resolve)
})
p.then(evt => {
cont btnID = evt.currentTarget.id
return request("http://sample.url1/?id=" + btnID)
}).then(res => console.log(res))
click("#btn", evt => {
const btnID = evt.currentTarget.id
request("http://sample.url1/?id=" + btnID)
.then(res => console.log(res))
})
- 无法取消:如果一个任务悬而未决,那么无法从外部停止它的进程。如果可以从外部取消,那么违背了未来值的可信任性。
- 性能:将一切变为了一部,但是它的优点是否足以弥补它的这个缺点?