Filtering an array with a function that returns a promise

前端 未结 15 1399
遇见更好的自我
遇见更好的自我 2020-11-28 13:22

Given

let arr = [1,2,3];

function filter(num) {
  return new Promise((res, rej) => {
    setTimeout(() => {
      if( num === 3 ) {
        res(num);
         


        
15条回答
  •  没有蜡笔的小新
    2020-11-28 13:59

    In case someone is interested in modern typescript solution (with fail symbol used for filtering):

    const failSymbol = Symbol();
    
    export async function filterAsync(
      itemsToFilter: T[],
      filterFunction: (item: T) => Promise,
    ): Promise {
      const itemsOrFailFlags = await Promise.all(
        itemsToFilter.map(async (item) => {
          const hasPassed = await filterFunction(item);
    
          return hasPassed ? item : failSymbol;
        }),
      );
    
      return itemsOrFailFlags.filter(
        (itemOrFailFlag) => itemOrFailFlag !== failSymbol,
      ) as T[];
    }
    

提交回复
热议问题