javascript异步函数

javascript异步函数,javascript,asynchronous,Javascript,Asynchronous,目前,我正在阅读以下两个答案,以便更好地理解问题并更好地使用javascript: 但目前我有以下代码: function getRegistration(id) { var numRegistered = 0; api.search({num: id, state: "done"}) .then(function(response) { numRegistered = response.data.content.length;

目前,我正在阅读以下两个答案,以便更好地理解问题并更好地使用javascript:

但目前我有以下代码:

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,因为它可能在异步调用完成之前执行该语句。我发现很难理解如何做到这一点,因此我等待调用,分配值并返回…解决方案似乎是使用回调函数或使用承诺。有人能帮我吗(是的,我来自面向对象的背景…)


api.search基本上执行一个$http.get。

以下是promise方法:

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
});
但是,同样,尽管现在您的函数返回了一些东西(承诺),但您仍然需要等待承诺得到解决,然后才能使用
numRegistered


这与原始
中发生的情况非常相似。然后
回调,但这里我们将非getRegistration代码移到了
getRegistration
函数之外,假设
getRegistration
在某个服务中,该服务不应该知道代码的其余部分。

您不能以经典方式返回值,因为它表明执行是同步的,并等待结果。但异步js并非如此。在这里,您可以将其作为参数传递给下一个函数或事件回调,如promise(success或fail…)事件。这就是js编码的方式