私は私の状況で約束をどのように処理すればよいのか少し混乱します。私はこのようにやって回避しようと私の工場で連鎖約束を扱う方法
return {
getCategory: function(categoryId) {
var ref = firebase.database().ref().child('categories').child(categoryId);
var category = $firebaseObject(ref);
return category.$loaded().then(function() {
return category;
});
},
getEntry: function(categoryId, entryId) {
var ref = firebase.database().ref().child('entries').child(categoryId).child(entryId);
var entry = $firebaseObject(ref);
return entry.$loaded().then(function() {
return entry;
});
}
}
:ロードされた$()が約束自体を返すので
var d = $q.defer();
if() {
d.resolve();
}
return d.promise;
この
は私の工場です。私が達成したい何var categoryId = 'abc';
var entryId = 'def';
// so here i'm getting the category
MyFactory.getCategory(categoryId)
.then(function(category) {
if(category.$value === null)
{
$scope.error = 'The category does not exist';
}
else if(new Date() > new Date(category.expireDate))
{
$scope.error = 'The category has expired';
}
else {
$scope.category = category;
// if no errors
return MyFactory.getEntry(category.$id, entryId);
}
})
.then(function(entry) {
if(entry.$value === null)
{
$scope.error = 'No such entry';
}
else {
$scope.entry = entry;
}
})
.catch(function(error) {
console.error(error);
});
は最初のカテゴリを取得することで、その後、いくつかのエラーがあるか否か、それぞれのエントリを取得:
は、これは私のコントローラです。データはFirebaseデータベースから取得されます。これは一種の働いている
、しかし、私は次の.thenをしたいとは、このような他に巣それら一つないとき、私は約束をどのように扱うか本当にわからない:
MyFactory.getCategory().then(function(category) {
if(no category errors) {
MyFactory.getEntry().then(function() {
// ...
});
}
});
今のところ、カテゴリが期限切れになっているか存在しないなど、コンソールでエラーが発生しています(タイプエラーエントリは未定義です)。 私が戻ったときに私はコントローラで何かが間違っていたと思うが、私は本当に確実ではないし、あなたがすべての疑問を払拭するのを助けることができると願っている。
実際の質問は、私がこのを正しく扱い、どのように正しくを処理するのですか?おかげさまで
おやっああ!それは私を大いに助けました。ありがとうございました。 もう一度少し混乱します。 $ q.rejectをサービスで使用しています。それは実際に拒否していると約束していますか?あなたは$ q.defer()をしないので? –
私は助けることができてうれしいです! '$ q.reject()'は、あるステップで約束を作成し拒否する「ショートカット」です。正式な文書は次のとおりです - https://docs.angularjs.org/api/ng/service/$q#reject –