需要帮助解决障碍。
我使用基于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链中写入数据库。
答案 0 :(得分:3)
这里的诀窍是使用Collection.rawCollection()asper meteor API docs和论坛上的this解释
所以现在这是有效的行:
Charities.rawCollection().insert(test);