在内部异步函数完成运行后,如何调用外部函数返回?

时间:2014-12-24 04:54:01

标签: javascript angularjs asynchronous

这是我的代码:

.filter('getUserName', function(User) {
    return function(id) {
       User.get({ _id: id }, function(user) {
           return user.name;
       });
    };
});

我希望中间函数返回user.nameUser.get是异步的,因此一旦内部异步函数完成运行,我只能从中间函数返回。

我知道在异步代码完成运行后运行代码的两种方法:使用成功回调或成功承诺。但是,这两个都创建了内部函数,因此我的问题 - 我不知道如何运行代码

  • 仅在异步函数完成后运行
  • 从中间函数返回。

1 个答案:

答案 0 :(得分:1)

这非常适合过滤器,但是作为一项智力练习,您可以让过滤器返回一些默认行为(即返回空白),直到获取数据,并且一旦获取过滤器就应用过滤器。这将使过滤器成为$stateful,这非常浪费 - 它将在每个摘要周期运行。

app.filter("foo", function($timeout){
  var cache = {};

  function genFoo(input){
    $timeout(function(){
      cache[input] = input + "foo!";
    }, 1000);
  }

  var filter = function(input){
    if (input in cache) return cache[input];
    genFoo(input);
    return "";
  };

  filter.$stateful = true;
  return filter;

});

Plunker

请勿将其作为过滤器:)