如何过滤掉 Promise.all 结果中的空值?

TIM*_*MEX 6 javascript promise

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();
        });
    }));
}
Run Code Online (Sandbox Code Playgroud)

现在,如果 snapshot.val() 为 null,则该元素仍包含在最终结果中。

如何不在最终映射中插入空元素?

ale*_*mac 8

添加then回调并用于Array#filter删除null元素:

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);
}
Run Code Online (Sandbox Code Playgroud)

更新:如果您需要删除与值完全一致的null元素,您应该使用此过滤器:v => v !== null