无法使用meteor

时间:2016-10-12 21:01:33

标签: mongodb meteor promise

需要帮助解决障碍。

我使用基于promise的npm包来获取慈善数据。该包是基于promise的,因此我使用promise链来解析和获取数据。这一切都运作良好。我能够创建一个soap客户端,搜索数据,获取数据,将数据解析为准备写入mongo db的对象数组,但这是问题的最后一步。

如果我在最终的.then()中将一个示例对象写入数据库,它会卡住/暂停,甚至不会返回错误。我可以在promise链开始之前写入db但不在内部。我更喜欢使用原生Promise而不是任何外部库。我在这里缺少什么?

// dummy data
const test = {
    CharityName: 'test'
};

Meteor.startup(function() {
    // init the db here.
    console.log(`Meteor started`);
    console.log(Charities.find().count());

    // *1 Charities.insert(test);

    if (Charities.find().count() === 0) {
        console.log('dbs is empty');
        ccAPI.createClient(ccAPIUrl)
            .then(function(client) {

                // *2 Charities.insert(test);

                console.log('searching for charitites');
                return GetCharitiesByKeywordList(client, { APIKey }, ["searchTerm"]);
        })
        .then(function(obj) {
            console.log('fetching all charities');
            const { client, res } = obj;
            return fetchAllCharities(client, { APIKey }, res);
        })
        .then(function(val) {
            console.log(`parse returned data with makeData()`);
            return makeData(val);
        })
        .then(function(val) {
            console.log(`writing objects to db`);

            // *3 Charities.insert(test);

        })
        .catch(function(error) {
            throw error;
        });
}
});

* 1有效,但* 2& * 3似乎挂起了代码的进度。库调用的细节并不重要,这里重要的是我无法从promise链中写入数据库。

1 个答案:

答案 0 :(得分:3)

这里的诀窍是使用Collection.rawCollection()asper meteor API docs和论坛上的this解释

所以现在这是有效的行:

Charities.rawCollection().insert(test);