0

我需要在加载时执行一个在控制器中定义的函数,以便在页面加载后立即从另一个地方获取 json 数据。
我试图在控制器中立即调用 func,现在我觉得这是个坏主意。
当发生不好的事情并引发异常时 - 控制器停止工作。

好吧,这并不令人惊讶,但目前我不知道如何解决。
当然,我可以将可能的危险代码包装在 try-catch 中,但这绝对不是最好的解决方案恕我直言。
这是示例代码:

app.controller("ServerStatusCtrl",
    function($scope) {
        $scope.reloadFunc = function()
        {
            throw "dat bad exception";
        }
        $scope.reloadFunc(); // Let's pretend that it's needed 2 call this function in load-time.
    });

以及 jsfiddle 上的示例

4

2 回答 2

1

我建议你使用$q的方式来通知发生了某事:返回 promise 并在发生错误后拒绝它。

这就是以异步/承诺方式完成异常处理的方式。

总体思路是:

  1. 函数应该返回 promise 而不是返回结果
  2. 当您准备好数据(从服务器加载)时,您会解决承诺
  3. 如果发生不好的事情,你会拒绝它。

    函数 someFunc() { var d = $q.defer(); do.somethingAsync(function(result) { if (somethingWrong) d.reject(result); else d.resolve(result); }); 返回 d.promise; }

在控制器中:

   $scope.myData = someFunc().then(function ok(result) { return ok.data; }, function faled() { handle...});

这可以很好地控制错误处理/恢复。

于 2013-06-14T14:18:53.450 回答
0

为此找到了更简单的解决方案。
刚刚发现了一个解决了整个问题的ngInit指令。
另外,我认为module.run(fn)也适用于这类任务。

于 2013-06-15T11:07:14.093 回答