小编给大家分享一下JavaScript循环中怎么使用异步/等待,希望大家阅读完这篇文章后大所收获、下面让我们一起去探讨吧!
<代码>异步代码>与<代码>等待> 代码的使用方式相对简单。但当你尝试在循环中使用<代码>等待> 代码时,事情就会变得复杂一些。
在本文中,分享一些在如果循环中使用<代码>等待> 代码值得注意的问题。
准备一个例子
对于这篇文章,假设你想从水果篮中获取水果的数量。
const fruitBasket =, { ,苹果:27岁 ,葡萄:0, ,梨:14 };
你想从<代码> fruitBasket 代码>获得每个水果的数量。要获取水果的数量,可以使用<代码> getNumFruit 代码>函数。
const getNumFruit =, fruit =祝辞,{ return 才能fruitBasket(水果); }; const numApples =, getNumFruit(& # 39;苹果# 39;); console.log (numApples);,//27日
现在,假设<代码> fruitBasket> 代码是从服务器上获取,这里我们使用<代码> setTimeout> 代码来模拟。
const sleep =,小姐=祝辞,{ return 才能;new 承诺(resolve =祝辞,setTimeout(解决,ms)) }; const getNumFruie =, fruit =祝辞,{ return 才能睡眠(1000)(v =祝辞,fruitBasket(水果)); }; getNumFruit (“apple") (num =祝辞,console.log (num)),,//, 27日
最后,假设你想使用<代码>等待代码>和<代码> getNumFruit> 代码来获取异步函数中每个水果的数量。
const control =, async _ =祝辞,{ console.log才能(& # 39;开始# 39;) const 才能;numApples =, await getNumFruit(& # 39;苹果# 39;); console.log才能(numApples); const 才能;numGrapes =, await getNumFruit(& # 39;葡萄# 39;); console.log才能(numGrapes); const 才能;numPears =, await getNumFruit(& # 39;梨# 39;); console.log才能(numPears); console.log才能(& # 39;结束# 39;) }
在为循环中使用等待
首先定义一个存放水果的数组:
const fruitsToGet =,(“苹果”,“葡萄”,“梨”],
循环遍历这个数组:
const forLoop =, async _ =祝辞,{ console.log才能(& # 39;开始# 39;); ,, for 才能;(let index =, 0;, index & lt;, fruitsToGet.length;,指数+ +),{ ,,,//,得到每个水果的数量 ,,} console.log才能(& # 39;结束# 39;) }
在<代码> 代码>循环中,过上使用<代码> getNumFruit> 代码来获取每个水果的数量,并将数量打印到控制台。
由于<代码> getNumFruit 代码>返回一个<代码> 代码>承诺,我们使用<代码>等待> 代码来等待结果的返回并打印它。
const forLoop =, async _ =祝辞,{ console.log才能(& # 39;开始# 39;); for 才能;(let index =, 0;, index & lt;, fruitsToGet.length;, index + +), { ,,,const fruit =, fruitsToGet(指数); ,,,const numFruit =, await getNumFruit(水果); ,,,console.log (numFruit); ,,} console.log才能(& # 39;结束# 39;) }
当使用<代码>等待> 代码时,希望JavaScript暂停执行,直到等待承诺返回处理结果。这意味着<代码> 代码>循环中的<代码>等待> 代码应该按顺序执行。
结果正如你所预料的那样。
“开始”; “苹果:27日”; “葡萄:0”; “梨:14”; “结束”;
这种行为适用于大多数循环(比如<代码>,代码>和<代码>的代码>循环)…
但是它不能处理需要回调的循环,如<代码> forEach 代码>,<代码> map 代码>,<代码>过滤器代码>和<代码>减少> 代码。在接下来的几节中,我们将研究<代码>等待> 代码如何影响<代码> forEach> 代码,地图和<代码>过滤器> 代码。
在forEach循环中使用等待
首先,使用<代码> forEach> 代码对数组进行遍历。