最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Array.filter中如何正確使用Async

 更新時間:2020年11月04日 15:57:46   作者:酷兒q  
這篇文章主要介紹了Array.filter中如何正確使用Async,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下

1. 如何僅保留滿足異步條件的元素

在第一篇文章中,我們介紹了 async / await 如何幫助處理異步事件,但在異步處理集合時卻無濟(jì)于事。在本文中,我們將研究該filter函數(shù),它可能是支持異步函數(shù)的最直觀的方法。

2. Array.filter

該filter函數(shù)僅保留通過條件的元素。它得到一個斷言( predicate )函數(shù),并且此函數(shù)返回 true / false 值。結(jié)果集合僅包含斷言( predicate )返回 true 的元素。

const arr = [1, 2, 3, 4, 5];

const syncRes = arr.filter((i) => {
	return i % 2 === 0;
});
console.log(syncRes);
// 2,4

3. filter 結(jié)合 map 使用

這次的異步版本要復(fù)雜一些,它分為兩個階段。第一個通過斷言函數(shù)異步地映射數(shù)組,從而生成true / false 值。然后第二步是利用第一步的結(jié)果同步 filter

const arr = [1, 2, 3, 4, 5];

const asyncFilter = async (arr, predicate) => {
	const results = await Promise.all(arr.map(predicate));

	return arr.filter((_v, index) => results[index]);
}

const asyncRes = await asyncFilter(arr, async (i) => {
	await sleep(10);
	return i % 2 === 0;
});

console.log(asyncRes);
// 2,4

或單行實現(xiàn):

const asyncFilter = async (arr, predicate) => Promise.all(arr.map(predicate))
.then((results) => arr.filter((_v, index) => results[index]));

并發(fā)

上面的實現(xiàn)同時運行所有斷言函數(shù)。通常,這很好,但是與所有其他功能一樣,它可能會使某些資源變得過分緊張。幸運的是,由于上述實現(xiàn)依賴于此map,因此可以使用相同的并發(fā)控件。

4. filter 結(jié)合 reduce 使用

除了使用異步map與同步之外filter,異步reduce 也可以完成這項工作。由于它只是一個功能,因此即使沒有提供相同級別的控制,結(jié)構(gòu)也更加容易。

首先,從一個空數(shù)組([])開始。然后通過斷言函數(shù)運行下一個元素,如果通過則將其追加到數(shù)組。如果沒有,請?zhí)^它。

// concurrently
const asyncFilter = async (arr, predicate) => 
	arr.reduce(async (memo, e) =>
		await predicate(e) ? [...await memo, e] : memo
	, []);

請注意,await predicate(e) 在 await memo 之前,這意味著這些將并行調(diào)用。

順序處理

要在調(diào)用下一個謂詞函數(shù)之前等待其結(jié)束,請更改await 的順序:

// sequentially
const asyncFilter = async (arr, predicate) => 
	arr.reduce(async (memo, e) => 
		[...await memo, ...await predicate(e) ? [e] : []]
	, []);

此實現(xiàn)等待上一個元素,然后根據(jù)斷言(...[e]或...[])的結(jié)果有條件地附加一個元素。

5. 結(jié)論

雖然異步filter是可能的,但它最初的工作方式看起來很奇怪。盡管并發(fā)控制仍然可用,但與其他異步功能相比,它們需要更多的計劃去控制它。

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • TypeScript為對象動態(tài)添加屬性代碼示例

    TypeScript為對象動態(tài)添加屬性代碼示例

    這篇文章主要給大家介紹了關(guān)于TypeScript為對象動態(tài)添加屬性的相關(guān)資料,在TypeScript 中,我們經(jīng)常需要在運行時動態(tài)添加屬性到對象上,需要的朋友可以參考下
    2023-07-07
  • TypeScript中類型映射的使用

    TypeScript中類型映射的使用

    TypeScript中的映射類型和數(shù)學(xué)中的映射類似,能夠?qū)⒁粋€集合的元素轉(zhuǎn)換為新集合的元素,本文就來介紹一下TypeScript中類型映射的使用,感興趣的可以了解一下
    2023-10-10
  • javascript插件開發(fā)的一些感想和心得

    javascript插件開發(fā)的一些感想和心得

    這篇文章主要介紹了javascript插件開發(fā)的一些感想和心得,需要的朋友可以參考下
    2016-02-02
  • js從外部獲取圖片的實現(xiàn)方法

    js從外部獲取圖片的實現(xiàn)方法

    下面小編就為大家?guī)硪黄猨s從外部獲取圖片的實現(xiàn)方法。小編覺得挺不錯的, 現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-08-08
  • Javascript類型判斷相關(guān)例題及解析

    Javascript類型判斷相關(guān)例題及解析

    這篇文章主要介紹了Javascript類型判斷相關(guān)例題及解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-08-08
  • js實現(xiàn)的四級左側(cè)網(wǎng)站分類菜單實例

    js實現(xiàn)的四級左側(cè)網(wǎng)站分類菜單實例

    這篇文章主要介紹了js實現(xiàn)的四級左側(cè)網(wǎng)站分類菜單,實例分析了javascript操作頁面元素實現(xiàn)tab切換的相關(guān)技巧,需要的朋友可以參考下
    2015-05-05
  • 在百度搜索結(jié)果中去除掉一些網(wǎng)站的資料(通過js控制不讓顯示)

    在百度搜索結(jié)果中去除掉一些網(wǎng)站的資料(通過js控制不讓顯示)

    這篇文章主要介紹了在百度搜索結(jié)果中去除掉一些網(wǎng)站的資料(通過js控制不讓顯示),需要的朋友可以參考下
    2017-05-05
  • JS前端首屏優(yōu)化技巧

    JS前端首屏優(yōu)化技巧

    這篇文章主要為大家介紹了JS前端首屏優(yōu)化技巧,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-07-07
  • JavaScript實現(xiàn)x秒后自動跳轉(zhuǎn)到一個頁面

    JavaScript實現(xiàn)x秒后自動跳轉(zhuǎn)到一個頁面

    今天看視頻學(xué)習(xí)時學(xué)習(xí)了一種新技術(shù),即平時我們在一個頁面點擊“提交”或“確認(rèn)”會自動跳轉(zhuǎn)到一個頁面,在網(wǎng)上搜了一下,關(guān)于這個技術(shù)處理有多種方法,有興趣的朋友可以參考下
    2013-01-01
  • js倒計時簡單實現(xiàn)代碼

    js倒計時簡單實現(xiàn)代碼

    這篇文章主要為大家詳細(xì)介紹了js倒計時簡單實現(xiàn)代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-08-08

最新評論

札达县| 石门县| 萝北县| 射洪县| 九寨沟县| 阿拉善盟| 三河市| 西城区| 南雄市| 商南县| 简阳市| 梨树县| 克什克腾旗| 宁阳县| 封丘县| 梅州市| 东乌| 黄骅市| 来宾市| 恩平市| 手游| 商城县| 德格县| 玛沁县| 开鲁县| 遂昌县| 增城市| 长寿区| 洮南市| 明溪县| 罗山县| 枝江市| 涞水县| 福泉市| 江安县| 建德市| 洞头县| 揭西县| 额敏县| 绵竹市| 英山县|