Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 用于环路&;承诺_Angularjs_Angularjs Service - Fatal编程技术网

Angularjs 用于环路&;承诺

Angularjs 用于环路&;承诺,angularjs,angularjs-service,Angularjs,Angularjs Service,我在管理带有多个承诺的for循环时遇到一些问题。我已经读到我应该使用$q.all,但到目前为止我还没有成功。我需要这个函数来确保for循环中的所有异步调用都已发生 refreshFeed: function(){ var defer = $q.defer(); var promises = []; // array of promises for (var x = 0; x < userdata.length; x++){ this.get

我在管理带有多个承诺的for循环时遇到一些问题。我已经读到我应该使用$q.all,但到目前为止我还没有成功。我需要这个函数来确保for循环中的所有异步调用都已发生

refreshFeed: function(){    
    var defer = $q.defer();
    var promises = []; // array of promises

    for (var x = 0; x < userdata.length; x++){
        this.getLatest(x).then(function(){
            promises.push(x);
        });    
    }
    console.log(userdata); // this is updated successfully by getLatest(x)

    $q.all(promises).then(function(){ 
        defer.resolve();
    })

    return defer; 
}

更新:我使用了PSL的答案,并玩弄了getLatest,终于让它工作了。我只需要用函数参数替换userdata[x]。谢谢@PSL

您需要通过一系列承诺,即使您使用延迟模式,您也无法解决任何问题。假设
getLatest
返回一个承诺,您可以这样做:-

refreshFeed: function(){    
    return $q.all(userdata.map(this.getLatest));
}

嘿,谢谢你的回复。我仍然得到一个错误,尽管我猜它与getLatest()有关。我已经按照您的回答设置了refreshFeed()。我收到错误“无法读取未定义的属性'searchterm'。我将用getLatest()代码更新这个问题
refreshFeed: function(){    
    return $q.all(userdata.map(this.getLatest));
}