javascript异步函数

时间:2014-09-17 11:25:24

标签: javascript asynchronous

目前我正在阅读这两个答案,以便更好地了解问题并在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。

1 个答案:

答案 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在内部一些不应该知道你的其余代码的服务。