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

标签 javascript angularjs asynchronous

这是我的代码:

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

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

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

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

最佳答案

这非常适合过滤器,但作为智力练习,您可以让过滤器返回一些默认行为(即返回空白),直到获取数据,并在获取数据后应用过滤器。这将需要过滤器为 $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

不要将此作为过滤器:)

关于javascript - 内部异步函数完成运行后如何调用外部函数返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27631681/

相关文章:

html - 具有自动滚动功能的固定长度的动态列

javascript - 如何在 Javascript/Protractor 中执行 'isVisible'

c# - 如何在执行异步方法后调用成功的回调函数?

javascript - 如何对数组进行分组并使表格显示在图表中?

javascript - 强制浏览器立即显示动态生成的内容 block ,而无需等待一次显示所有 block

javascript - 无法在 Angular Js 中使用 ng-if 检索下拉 ng-model 值

javascript - 使用 Angular JS 和脚本加载器 Modernizr

javascript - 滚动到事件标签

javascript - jQuery 简单克隆插件 - 更改输入名称格式

c# - 我是否需要在逻辑请求结束时手动将 AsyncLocal 变量的值更改为 "Dispose"/"Release"