用于级联SignalR数据访问的“最佳实践”

时间:2014-04-15 14:45:16

标签: c# javascript jquery signalr.client

我的客户端SignalR JavaScript文件中包含此代码:

ticker.client.observationArrived = function (eventData) {
    console.log("Enter observationArrived with %o", eventData.time);
    var observationId = eventData.observationId;

    // Use cascading jquery "done" functions.
    // First get observation
    ticker.server.getObservation(observationId).done(function (observation) {
            console.log("Cascaded from getObservation with %o and %o", eventData.time, observation.ObservationGroupId);

            var observationGroupId = observation.ObservationGroupId;
        // Next get observation group
        ticker.server.getObservationGroup(observationGroupId).done(function(observationGroup) {
            console.log("Cascaded from getObservationGroup");
            // Add data to HTML table
            var newData = {
                time: eventData.time,
                observationId: eventData.observationId,
                observationGroupName: observationGroup.Name
            }
            $observationTableBody.append(rowTemplate.supplant(newData));
        });
    });
}

现在我想再往前走一步,采取" ProductId"来自"观察组"并调用" getProduct"获取产品信息以将其中一些添加到我的HTML表格中。但是每个访问级别越来越深,并且没有函数嵌套,我看不到任何方法将例如eventData.observationId传递给通过done调用的函数。它没有给出一个温暖的模糊。

还有其他一些方法来处理这个问题,比方说,使用某种全局(但本地交易)数据可以让我更干净地分解,并且没有无限深层嵌套的威胁吗? (我知道我可以声明这些方法不合适,但是我们仍然必须静态嵌套。)

或者有没有办法在done上传递多个参数?我已经看过几个像(entityA, entityB).done(function theFunction(a,b) {...那样做的例子,但我无法得到类似的东西,而且找不到关于表格的文档。

还是有其他方法可以处理这种一般性的"级联"情况,也许是通过使用事件?

(意识到这使得这是一个"意见"问题)你会考虑什么"最佳实践"这里吗?

1 个答案:

答案 0 :(得分:0)

恕我直言,事件将是这里的方式。
如果您有多个嵌套事件 - 并且它们只会更深入和更嵌套,那么可能尝试Reactive Extensions。

  

...是一组用于组合异步和基于事件的库   使用可观察集合和Array#extras样式的程序   JavaScript中的组合。

github上有一个JavaScript库版本https://github.com/Reactive-Extensions/RxJS