我正在使用loopback v3.0.0-alpha.2并创建了一个应用程序两个模型并完成了向mysql数据库的迁移。
我现在要做的是使用操作挂钩"已加载"在检索数据时将一些模型中的更多数据注入另一个模型。
在实施"加载"之前钩子,当我在第一个模型的端点上进行简单的GET调用时,让我们说我确实收到两行:
[
{
"id": 1,
"name": "Some Name"
},
{
"id": 2,
"name": "Some Other Name"
}
]
为了注入数据,我尝试了以下内容:
MyModel.observe('loaded', function someFunction(ctx, next) {
var MySecondModel = MyModel.app.models.MySecondModel;
if (some_condition) {
MySecondModel.findById(ctx.data.some_id).then(function (data) {
ctx.data.some_property = data.some_property;
}).catch(function (err) {
next(err);
});
} else {
next();
}
});
因此,在某些情况下,我想从第二个模型中查找数据并将其中一个属性注入原始上下文。奇怪的是,当我运行这个"加载"调用hook(条件为真),结果会像这样被破坏:
[
{
"id": 2,
"name": "Some Other Name"
},
{
"id": 2,
"name": "Some Other Name",
"some_property": "some_value"
}
]
如您所见,数据被复制到第一行。展望" dao.js"来自" loopback-datasource-juggler"包,我找到了" DataAccessObject.find"特别是在" allCb"功能及其" async.forEach"循环结果集。如果启用了通知,它首先会调用" withNotify"在" loading"之后的方法钩子已被执行,调用" buildResult"方法
调试流程时,会发生以下调用:
这里的问题似乎是变量" d"这是" async.forEach"的本地在第二个" withNotify"使用第二行的数据并将其用作上下文数据的参考,甚至第一次执行" buildResult"将在第二个数据集上工作。
所以,我的问题是:
非常感谢任何帮助, 托拜厄斯。