目前我正在阅读这两个答案,以便更好地了解问题并在javascript上取得更好的成绩:
wait for async task to finish Promises in AngularJS and where to use them?
但目前我有这段代码:
function getRegistration(id) {
var numRegistered = 0;
api.search({num: id, state: "done"})
.then(function(response) {
numRegistered = response.data.content.length;
)};
console.log(numRegistered);
}
现在我可以期望numRegistered
为0,因为它可能在异步调用完成之前执行该语句。我发现很难理解如何执行此操作以便等待调用,分配值并返回它...解决方案似乎使用回调函数或使用promise。有人可以帮助我(是的,我来自面向对象的背景......)。
api.search基本上执行$ http.get。
答案 0 :(得分:1)
这是承诺方法:
function getRegistration(id) {
return api.search({num: id, state: "done"}); // we just return the promise
}
然后,在您的控制器或服务中,您将等待它解决:
getRegistration(id).then(function(res) {
var numRegistered = res;
// rest of the code here
});
但是,虽然现在你的函数返回了一些东西(一个promise),你仍然需要在numRegistered
可用之前等待承诺得到解决。
这与原始.then
回调中发生的情况非常相似,但在此我们已将非getRegistration代码移到getRegistration
函数之外,假设getRegistration
在内部一些不应该知道你的其余代码的服务。