不幸的是,没有办法以您想要的方式可靠地交错这两个异步函数(因为没有线程,您不能“暂停”执行)。它们可以以不一致的顺序完成,这使您可以解决诸如超时之类的问题。
我建议您将事件处理程序连接到 Activity 类,以便当 Activity 写入/失败时,它会查看应记录的排队(散列?)活动列表。所以,当一个活动被创建时,添加到列表("onactivitycreated")
。然后,它最终会被写入("onactivitywritten"
),比较和删除成功可能(不确定摩卡有什么意义)。当你的测试完成后,你可以看看列表是否空的。
util.inherits(Activity, EventEmitter)
例如,您可以使用事件功能扩展 Activity 类。
现在,您仍然需要在列表中等待/超时,如果存在未通过事件处理的故障,您也需要处理。
编辑——忽略下面的建议,因为它是一个有趣的异步演示,它不适合你。:)
如果您想测试它们,我会看一下像async这样的库,您可以在其中执行一系列代码(或waterfall
在本例中),以便您可以首先创建一个User
,然后,一旦它完成,确认Activity
已记录正确。我在waterfall
这里使用过,以便可以将值从一个任务传递到下一个任务。
async.waterfall([
function(done) {
User.create({name: "foo"}, function (err, user) {
if (err) { done(err); return; }
done(null, user._id); // 2nd param sent to next task as 1st param
});
},
function(id, done) { // got the _id from above
// substitute efficient method for finding
// the corresponding activity document (maybe it's another field?)
Activity.findById(id, function (err, act) {
if (err) { done(err); return; }
if (act) { done(null, true);
done(null, false); // not found?!
});
}
], function(err, result) {
console.log("Success? " + result);
});