gpt4 book ai didi

javascript - 失败 : col. 插入({},cb)与成功 col.insert({},()=> cb())

转载 作者:可可西里 更新时间:2023-11-01 10:48:48 26 4
gpt4 key购买 nike

求解释。尝试了没有粗箭头的变体,结果相同。使用

"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);
});

最佳答案

我能想到的唯一解释是 collection.insert 使用真实参数调用它的回调;也就是说,如果我们假设 nodeback 约定,它会导致错误。

因此,您的测试失败是预期的

那么为什么其他两个代码“有效”呢?

  • 在第二个片段中,() => { cb1(); } 作为 insert 的回调(隐式?)忽略错误,无论它是否被调用,它永远不会将任何东西传递给 cb1
  • 在第三个片段中,async.each 将失败(正确)并调用其回调 () => { setTimeout(function(){cb()}, 10); } 错误 - whcih 再次隐式忽略它并且永远不会将它传递给 cb。超时是不必要的,each(…, () => cb()) 会得到相同的结果。

关于javascript - 失败 : col. 插入({},cb)与成功 col.insert({},()=> cb()),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45946436/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com