【发布时间】:2017-08-31 02:24:01
【问题描述】:
寻求解释。尝试了没有粗箭头的变化,结果相同。 使用
"mongodb": "^2.2.24",
以下代码不起作用(我稍后加载这些值,但它们不存在)
addCollections(data, cb) {
var names = Object.keys(data);
async.each(names, (name, cb1) => {
db.createCollection(name).then((collection) => {
collection.insert(data[name], cb1);
}).catch(cb1);
}, cb)
},
但是这段代码确实工作:
addCollections(data, cb) {
var names = Object.keys(data);
async.each(names, (name, cb1) => {
db.createCollection(name).then((collection) => {
collection.insert(data[name], (a, b) => {
// reverted this comment bc Im debugging this
cb1();
})
}).catch(cb1);
}, cb);
},
以下也有效:
addCollections(data, cb) {
var names = Object.keys(data);
async.each(names, (name, cb1) => {
db.createCollection(name).then((collection) => {
collection.insert(data[name], cb1);
}).catch(cb1);
}, () => {
setTimeout(function() {
cb()
}, 10);
})
},
@Adam 要求的调用堆栈(使用实验室作为测试库):
execute(fixture, verify, cb) {
db.connect(() => {
db.drop(() => {
db.addCollections(fixture, () => {
this.executeNode(fixture, verify, cb);
});
});
});
},
executeNode(fixture, verify, cb) {
var injectOptions = {
method: 'GET',
url: 'myUrl
};
server.inject(injectOptions, function (response) {
verify(response.result);
db.close(cb);
});
},
test('default', (done) => {
fb.execute(fixture, verify, done);
});
【问题讨论】:
-
不要和
async.js一起使用promises -
第一个确实应该是正确的。你能告诉我们你是如何调用它并处理错误的吗?
-
我很好奇,为什么没有异步承诺?
-
因为它们是不同的接口,很难在没有错误的情况下组合。您的代码中有这么多回调,真的很难查看其中哪些使用 nodeback 约定(采用错误和结果参数)。
标签: javascript mongodb async.js