获得徽章 0
- #每天一个知识点#
promise、promise.all、promise.race、promise.allSettled用法总结:
promise用于处理异步操作,有效的解决回调地狱的问题。它有初始(pending)、成功(fulfilled)和失败(rejected)三种状态。只有异步操作的结果可以改变这个状态,promise对象的状态改变只有从初始变成成功或者失败两种可能,而且状态一经改变就不会再变。
promise.all可以将多个promise实例包装成一个新的promise实例。所有结果都成功时会返回一个按顺序的结果数组。不管是promise还是promise.all只要遇到失败时,promise的状态都会变成rejected,直接走.catch,不会再走.then。
promise.race就是所有的异步操作不管成功失败,哪个先执行完就返回那个的值。
promise.allSettled 是为了解决promise.all其中有失败不返回其他promise结果提出的第四阶段草案,部分浏览器不支持。所以它的最大特点就是无论请求对错最终都会返回一个数组对象到.then中,并且返回的数据中标识了错误跟正确数据的区别。展开评论点赞 - #每天一个知识点#
避坑:js正确使用fill方法初始化二维数组。
首先,说一下坑,fill方法大家都知道是用来填充数组的,如 let n=new Array(3).fill(0); 会得到一个长度为3,全部被0填充的一维数组。当我们想使用它创建二维数组时候,可能会这么写 let arr = new Array(3).fill(new Array(3).fill(0)) 看似得到的二维数组也没有啥问题。但是,当给某个元素赋值时,如令arr[1][1]=1, 会发现每一个一维数组下标为1的值都被改变了。
然后,谈一下原因,当fill()的参数不是基本类型时,并不是将它的值填充到数组,而是将它的地址填充到数组,所以会出现上面的现象。
最后,讲一下如何解决。这里提供一种思路,使用map给每个一维数组分别赋值。 let arrNew = new Array(3).fill(0).map(s => new Array(3).fill(0)) 即可。展开等人赞过评论6