次のパターンのコードがあります。このコードでは、ユーザーがビューのデータを更新するたびに更新が呼び出されます。約束が返る前にpromiseの2回目の呼び出しが実行されます - 角型JavaScript
// FACTORY SERVICE CODE
.factory('updateService', ['$http', '$q', function($http, $q){
var df = $q.defer();
var updateData = function(uriName, dataObj){
$http({
method: 'PUT',
data: dataObj,
url: uriName
}).then(function successCallback(response) {
console.log('from put');
console.log(response.data);
df.resolve(response.data);
}, function errorCallback(response) {
console.log('Error', response.data);
df.reject(response.data);
});
return df.promise;
}
return {updateData:updateData};
}])
// CONTROLLER CODE
.controller('MainCtrl', ['$scope','updateService', function($scope, updateService) {
$scope.saveToServer = function(){
var tmpObj = {data: $scope.dataOne, anotherData: $scope.dataTwo};
myService.updateData(uriName, tmpObj).then(function(resolved) {
console.log('CONTROLLER');
$scope.myData = resolved;
console.log($scope.myData);
console.log('end');
}, function(rejected){
console.log('put rejected');
});
});
$scope.btnUpdateClick = function(){
$scope.saveToServer();
};
}]);
問題:ユーザが最初の更新要求を行うと予想されるように、コードは 働きます。しかし、ユーザーがその後に更新すると、「解決済みの約束」コード(コントローラ内)がFIRSTを実行し、$ httpコード(サービス内)が実行されます。
from put
Array [ Object, Object]
CONTROLLER
Array [ Object, Object]
end
CONTROLLER
Array [ Object, Object]
end
from put
Array [ Object, Object]
QUESTION:私は間違いを犯してよどこ は親切に私を指摘btnUpdateClickの
サンプル出力は、イン間に十分な間隔で二回作ったのですか?
PUTリクエストのために問題がありますか?
または実行キューを$ applyなどで期待通りに修正することは可能ですか?
'VAR DF = $ Q。defer(); 'このコードを' updateData'関数の中に入れてください。 そして別の提案は、$ http呼び出しのための別の約束事を作成する理由です。 $ http約束を返すだけです。 –
@pragaas upvoting後に回答を受け入れる方が良いでしょう:) –
@ARUN - 正しく指摘されています。 – Mikki