中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

在Array.filter中使用Async的正確方法

發布時間:2020-11-05 14:18:12 來源:億速云 閱讀:396 作者:Leah 欄目:開發技術

本篇文章給大家分享的是有關在Array.filter中使用Async的正確方法,小編覺得挺實用的,因此分享給大家學習,希望大家閱讀完這篇文章后可以有所收獲,話不多說,跟著小編一起來看看吧。

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

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

2. Array.filter

該filter函數僅保留通過條件的元素。它得到一個斷言( predicate )函數,并且此函數返回 true / false 值。結果集合僅包含斷言( 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 結合 map 使用

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

在Array.filter中使用Async的正確方法

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

或單行實現:

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

在Array.filter中使用Async的正確方法

并發

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

4. filter 結合 reduce 使用

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

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

在Array.filter中使用Async的正確方法

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

在Array.filter中使用Async的正確方法

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

順序處理

要在調用下一個謂詞函數之前等待其結束,請更改await 的順序:

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

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

在Array.filter中使用Async的正確方法

5. 結論

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

以上就是在Array.filter中使用Async的正確方法,小編相信有部分知識點可能是我們日常工作會見到或用到的。希望你能通過這篇文章學到更多知識。更多詳情敬請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

黔江区| 顺平县| 土默特左旗| 贵南县| 漳州市| 定州市| 长垣县| 蕲春县| 霞浦县| 广昌县| 额济纳旗| 嘉荫县| 沽源县| 屯门区| 宾阳县| 札达县| 平顶山市| 巴林左旗| 沽源县| 安丘市| 梨树县| 呈贡县| 长丰县| 手游| 兖州市| 武强县| 神农架林区| 永年县| 海阳市| 枝江市| 雷波县| 德令哈市| 金华市| 祁门县| 青海省| 和硕县| 历史| 台中县| 攀枝花市| 琼海市| 旺苍县|