【发布时间】:2017-02-21 19:50:21
【问题描述】:
在遇到障碍时需要帮助。
我正在使用基于 Promise 的 npm 包来获取慈善数据。这个包是基于 Promise 的,所以我使用 Promise 链来解析和获取数据。这一切运作良好。我能够创建一个soap客户端,搜索数据,获取数据,将数据解析成一个准备写入mongo db的对象数组,但问题在于最后一步。
如果我在最终的 .then() 中将一个示例对象写入数据库,它会卡住/停止,甚至不会返回错误。我可以在承诺链开始之前写入数据库,但不能在内部写入。我更喜欢使用原生 Promises 而不是任何外部库。我在这里错过了什么?
// 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 似乎挂起代码的进度。库调用的细节无关紧要,重要的是我无法从承诺链中写入数据库。
【问题讨论】:
-
如果返回 Charities.insert() 的值是否会抛出错误?是
Meteor code must always run within a Fiber吗? -
@JeremyS。没有发现错误。