将先前承诺的数据放入新的承诺中

时间:2018-02-10 13:57:14

标签: javascript node.js promise

我需要将先前承诺结果中的数据放到下一个承诺结果中。

var database = admin.database().ref('/schema-v0_1/objects/subscription');
    return database.once("value").then(function(snapshot) {
        var array_user_subs = [];
        snapshot.forEach(function(data) {
            var user_uid = data.key;
            var database_user_subs = admin.database().ref('/schema-v0_1/objects/subscription');
            var promise = database_user_subs.child(user_uid).once("value", function(snapshot) {
            }, function(error) {
            });
            array_user_subs.push(promise);
        });
        return Promise.all(array_user_subs);
    }).then(function(array_user_subs) {
        var array_subs_info = [];
        array_user_subs.forEach(function(data) {
            var user_uid = data.key;

            data.forEach(function(snapshot) {
                var gpa = snapshot.key;
                var token_purchase = snapshot.val().token;
                var sku_purchase = snapshot.val().sku;

                var promise = promisify(publisher.purchases.subscriptions.get)({
                    packageName: 'com.example',
                    subscriptionId: sku_purchase,
                    token: token_purchase
                });

                //how to linked user_uid with promise?
                array_subs_info.push(promise);
            });
        }
        return Promise.all(array_subs_info);
    }).then(function(array_subs_info) {
        //here I get array with results of promise, but how to get linked with result user_uid from previous promise in previous then()?
    });

在第一个then中,我从带有promise的firebase数据库中获取结果,并请求获取有关user_uid订阅的数据,并将此请求的结果放入promise。但是如何将user_uidpromise相关联?

1 个答案:

答案 0 :(得分:1)

你可以创建一个"运输"承诺范围之外的数组(因此它在所有.then块中可用,在您的情况下,您在创建database对象的同一级别上),推送{{1你在哪里使用它们创建promises然后在你需要的地方撤回它们,只需确保carriage数组与你传递给user_uid调用的数组具有相同的索引,这样就可以将id映射到相应的承诺:

Promise.all