こんにちは私はPromise Chainingを実装しようとしています。以下の私の角型プロジェクトでq-libraryを使用しています。私の2つのメソッドとそれらがチェーンされている方法は私の問題を理解するメソッド実装です。今度はpathUserDataFromAuthService
メソッドで、私は最初の約束で設定した値、すなわちgetUserDataFromAuthServer
をsetEtag()
メソッドを使用してアクセスしたいと思っています。問題はgetEtag()
メソッドが最初の約束データが解決される前に呼び出されます。正しいのEtag値を確保する方法をPromise Chaining
は、この点で任意のヘルプは
getUserDataFromAuthServer(user)
.then(pathUserDataFromAuthService(user))
素晴らしいことだとメソッドのコードは
getUserDataFromAuthServer = function(user){
var defer=$q.defer();
$http.get(autherizationURL+'/'+'api/users/'+user.username)
.then(function(response){
var ETag =response.headers().etag;
console.log("etag"+ETag)
setEtag(ETag)
console.log("Etag Set changed");
defer.resolve(response.data);
},function(error){
defer.reject(error.statusText);
});
return defer.promise;
};
var pathUserDataFromAuthService = function (user){
var defer=$q.defer();
var passwordtobesaved ={
"firstName": user.firstName,
"lastName": user.lastName
};
var tag = getEtag();
$http.put(autherizationURL+'/'+'api/users/'+user.username,passwordtobesaved,{
headers:{
"If-Match": tag
}
}).then(function(response){
defer.resolve(response.data);
},function(error){
defer.reject(error.statusText);
});
return defer.promise;
};
まず、[遅延反パターンを避ける](http://stackoverflow.com/q/23803743/1048572)! – Bergi
あなたはコールバック*関数*を '約束'(関数呼び出しの結果)ではなく 'then'に渡す必要があります – Bergi