Node js - 用于返回从数据库读取的数据的数组

时间:2018-05-19 19:28:29

标签: node.js firebase firebase-realtime-database google-cloud-functions

我正在尝试在节点js中创建一个函数,该函数在for循环中读取数据库值并将它们推送到数组中,然后在最后返回此数组。 我的功能目前看起来像这样:

function loadTokens(userIds) {
    var tokens = [];
    userIds.forEach(item => {
        admin.database().ref('/users/' + item).once('value').then(snapShot => {
            var user = snapShot.val();
            console.log('User', user.name);
            console.log('token', user.fcmToken);
            return tokens.push(user.fcmToken);
        };
    });
    return tokens;
}

在代码的主要部分中,我想调用这个函数并使用.then来获取返回的数组并调用另一个以数组作为参数的函数。我想这样做是为了确保在作为参数传递时填充数组。

return loadTokens(userIds).then(tokens => {
    console.log('tokens', tokens)
    return admin.messaging().sendToDevice(tokens, payload);
});

我做了一些研究,并且我了解到我必须在我的函数中返回一个Promise,它以某种方式包含数组,因此可以在.then语句中使用它。

你能帮我解决一下如何在函数中返回一个promise以及如何在.then部分中访问数组?

1 个答案:

答案 0 :(得分:1)

这样的事情可以解决问题:

function loadTokens(userIds) {
    var promises = userIds.map(item => admin.database().ref('/users/' + item).once('value'));
    return Promise.all(promises).then(snapshots => {
        return snapshots.map(snapshot => snapshot.val().fcmToken);
    });
}

因此我们使用Promise.all()等待加载所有令牌,并从then完成处理程序返回令牌。

相关问题