嵌套异步函数未及时返回数据的问题

Issue with nested asynchronous function not returning data in time

本文关键字:返回 数据 问题 异步 函数 嵌套      更新时间:2023-09-26

我依赖于一个组件,即角度材料自动完成,它需要一个返回值的函数。

不幸的是,我不确定如何在适当的时候从下面的嵌套异步函数(addressAutocomplete())返回一些东西:

$scope.chooseAddress = function (input) {
    var results = [];
    if (input) {
        geolocationService.addressAutocomplete(input, function (data) {
            results = data.predictions;//Will be fired asynchronously and too late...
        });
    }
    return results;//I have to return something from my function...
};

当地址自动完成函数完成时,results var 已经返回,它当然是一个空数组......

有人可以帮忙吗?

您需要向 chooseAddress 的被调用方公开调用是异步的。您可以通过返回承诺来实现这一点。

将实现更新为

$scope.chooseAddress = function (input) {
    var deferred = $q.defer();
    if (input) {
        geolocationService.addressAutocomplete(input, function (data) {
            deferred.resolve(data.predictions);
        });
    } else {
        deferred.resolve([]);
    }
    return deferred.promise;
};

然后你打电话给chooseAddress

$scope.chooseAddress(input).then(function(result){
    // the result will be available here
});