操作中的异步调用hook" loaded"破坏了结果

时间:2016-07-28 07:53:11

标签: loopbackjs strongloop

我正在使用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"方法

调试流程时,会发生以下调用:

  1. withNotify(第一行一个)
  2. withNotify(第二行一个)
  3. buildResult(在第一行)
  4. buildResult(在第二行)
  5. 这里的问题似乎是变量" d"这是" async.forEach"的本地在第二个" withNotify"使用第二行的数据并将其用作上下文数据的参考,甚至第一次执行" buildResult"将在第二个数据集上工作。

    所以,我的问题是:

    1. 从数据源检索数据后是否有正确的方法来丰富数据?
    2. 如果没有,有没有办法可以解决这个异步问题?
    3. 非常感谢任何帮助,    托拜厄斯。

0 个答案:

没有答案