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

How do you call an outer functions return after an inner async function finishes running?

本文关键字:函数 调用 外部 返回 运行 在内部 异步      更新时间:2023-09-26

这是我的代码:

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

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

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

  • 仅在异步函数完成并且
  • 从中间函数返回。

这对于过滤器来说是一个糟糕的契合度,但就像一个智力练习一样,你可以让过滤器返回一些默认行为(即返回空白),直到数据被获取,一旦获取应用过滤器。这将需要过滤器$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;
});

普伦克

不要将此作为过滤器:)