2015-12-01 169 views
0

我使用$ q和承諾有麻煩。
我這樣做:

for (var i = 0; i<$scope.products.length; i++){ 
    var product = $scope.products[i]; 
    promises.push(Sale.save(product,function(result){ 
     $scope.listOfProducts.push(result); 
    })); 
} 
$q.all(promises).then(function() {  
     echo('done'); 
    }); 
}); 

我的問題是,回聲(「完成」)所有Sale.save完成之前被調用。 我不知道爲什麼。

如果有人知道...
謝謝

+0

如果'Sale'是'$ resource',則承諾通過可用'返回對象的$ promise'屬性:'promises.push(Sale.save(...)。$ promise)'。 – sp00m

+0

你可以分享'save'的代碼嗎? –

+0

保存是調用java控制器的資源 – user1260928

回答

1

我假設Sale是一種資源,如果是這樣的話,你需要有點不同處理的承諾。

嘗試這種情況:

for (var i = 0; i<$scope.products.length; i++){ 
    var product = $scope.products[i]; 
    promises.push(Sale.save(product).$promise.then(function(result){ 
     $scope.listOfProducts.push(result); 
     return result; 
    })); 
} 
$q.all(promises).then(function(results) {  
     echo('done'); 
    }); 
}); 
+0

添加.then時出現錯誤:TypeError:undefined不是'then'上的函數。銷售是一種資源。 – user1260928

+0

你可以添加'Sale'的代碼嗎?它是'$資源'嗎? –

+0

我的不好,我剛剛意識到我錯過了'$ promise'。現在就試試。 –

0

Here is使用$timeout來模擬每個功能過程中的延遲一個粗略的例子。

你應該嘗試,以推動功能到承諾隊列獨立滾動圓返回每個值:

promises.push($scope.testFuncToResolve(i).then(function (result) { 
    //extra stuff here 
    return result; 
}));