实际工作中,当目标数组的元素内容比较复杂,在回调函数中没有办法进行简单的逻辑判断时,可以使用Promise.all 方法实现:
Promise.all(
[1,2,3].map((item) => {
return new Promise((resolve, reject) => {
setTimeout(() => {
console.log("in async function, item is" + item);
resolve(item)
},Math.random()*2000)
).then((result) => {
console.log("all done");
console.log("result are:", result);
JavaScript数组对象,有一个forEach方法,可枚举每一个数组元素,但并不支持类似for循环的break语法,中断循环:
[1,2,3].forEach(function(item) {
// if(!item) break; 不支持
解决办法,可抛出一个特殊异常,来中断forEach循环,原理:
var BreakException = {};
try {
[1, 2, 3].forEach(function(el) {
console.log(el);
if (el === 2) throw BreakException;
} catch (e) {
const ids = [1, 2, 3, 4, 5];
ids.forEach(id => {
const list = http(id); //http为一个异步请求,拿到对应id的信息
result.push(list.name);
console.log(result); // []
结果事与愿违是一个空的数组,其实我们希望的结果打印对应id的信息name;原因在于http是一个异步请求,那么forEach的函数回调
数组遍历中每次遍历都需要去请求getStaffCover接口,拿到该接口的结果拼接到数组的每一项,等到数组遍历完之后,拿到拼接好的数组。拼接的数组必须是最终遍历的结果,所以得等到所有的请求结束之后进行操作,使用map可以返回每一次异步请求的Promise合集,注意这里不需要return,然后使用Promise.all等待执行完所有的异步操作,然后才会执行后面的代码
const promise = nv.aiFaceData.items.map(async item => {
文章目录一、forEach方法二、回调函数的使用
一、forEach方法
forEach方法时数组变量调用的方法,参数有两个,一个是function,另一个是object,一般只用function的,而这个function就是回调函数。
二、回调函数的使用
<!DOCTYPE html>
<meta charset="utf-8">
<title></title>
<script type
{ symbol: “XFX”, price: 240.22, volume: 23432 },
{ symbol: “TNZ”, price: 332.19, volume: 234 },
{ symbol: “JXJ”, price: 120.22, volume: 5323 },
你需要为其中的symbol创建一个新数组, 也就是
[ “XFX”, “TNZ”, “JXJ”]
一般可以用for循环实现:
function