这是我的代码:
.filter('getUserName', function(User) {
return function(id) {
User.get({ _id: id }, function(user) {
return user.name;
});
};
});
我希望中间函数返回user.name
。 User.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;
});
不要将此作为过滤器:)
关于javascript - 内部异步函数完成运行后如何调用外部函数返回?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27631681/