最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - How do I filter out null values in my Promise.all result? - Stack Overflow

programmeradmin0浏览0评论
exports.getMentionedUsers = function(str) {
    return Promise.all(getUsernamesFromString(str).map(username => {
        return db.ref('/users').orderByChild('username').equalTo(username).once('value').then(snapshot => {
            return snapshot.val();
        });
    }));
}

Right now, if snapshot.val() is null, the element is still included in the final result.

How do I not insert a null element in the final map?

exports.getMentionedUsers = function(str) {
    return Promise.all(getUsernamesFromString(str).map(username => {
        return db.ref('/users').orderByChild('username').equalTo(username).once('value').then(snapshot => {
            return snapshot.val();
        });
    }));
}

Right now, if snapshot.val() is null, the element is still included in the final result.

How do I not insert a null element in the final map?

Share Improve this question asked Aug 29, 2017 at 22:04 TIMEXTIMEX 272k367 gold badges802 silver badges1.1k bronze badges 3
  • if(snapshot.val()) return snapshot.val() – TimCodes Commented Aug 29, 2017 at 22:10
  • Use Array filter function and filter the null elements from your array – sidanmor Commented Aug 29, 2017 at 22:12
  • .then(arr => arr.filter(Boolean))? – Bergi Commented Aug 29, 2017 at 22:23
Add a ment  | 

1 Answer 1

Reset to default 8

Add then callback and use Array#filter to remove null elements:

exports.getMentionedUsers = function(str) {
    return Promise
        .all(getUsernamesFromString(str).map(username => {
            return db.ref('/users').orderByChild('username').equalTo(username).once('value').then(snapshot => {
              return snapshot.val();
            });
        }))
        .then(values => values.filter(v => v);
}

Update: If you need to delete elements exactly with null value, you should use this filter: v => v !== null.

发布评论

评论列表(0)

  1. 暂无评论