【问题标题】:Issue with nested asynchronous function not returning data in time嵌套异步函数未及时返回数据的问题
【发布时间】:2015-03-16 20:35:17
【问题描述】:

我依赖一个组件,即Angular Material Autocomplete,它需要一个返回值的函数。

不幸的是,我不确定如何从下面的嵌套异步函数 (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...
};

在addressAutocomplete函数完成的时候,results var已经被返回,当然是一个空数组...

有人可以帮忙吗?

【问题讨论】:

    标签: javascript angularjs


    【解决方案1】:

    您需要公开调用与chooseAddress 的被调用者异步的事实。您可以通过返回 promise 来实现此目的。

    将实现更新为

    $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
    });
    

    【讨论】:

    • 非常感谢 Anzeo!
    猜你喜欢
    • 2014-06-23
    • 2017-12-09
    • 1970-01-01
    • 2016-04-22
    • 2018-10-28
    • 2021-11-29
    • 2019-10-08
    • 1970-01-01
    • 2012-10-12
    相关资源
    最近更新 更多