Skip to content Skip to sidebar Skip to footer

Asynchronous Or Promised Condition For Array Filter

I need to filter an array based on a condition that can only be checked asynchronously. return someList.filter(function(element){ //this part unfortunately has to be asynchron

Solution 1:

In libraries like Bluebird - you have methods like .map and .filter of promises built in. Your approach is generally correct. You're just missing an Array.prototype.filter at the end removing the "bad results" - for example, resolve with a BadValue constant and filter elements that are equal to it.

varBadValue = {};

return q.all(someList.map(function (listElement) {
        returnpromiseMeACondition(listElement.entryId).then(function (listElement) {
            return (condition(listElement)) ? listElement : BadValue;
    })).then(function(arr){
            return arr.filter(function(el){ return el !== BadValue; });
    });

With Bluebird:

Promise.filter(someList,condition);

You can of course, extract this functionality to a generic filter function for promises.

Post a Comment for "Asynchronous Or Promised Condition For Array Filter"