2016-07-11 4 views
3

Firebaseがpromises in the databaseに実装されています。そのブログ記事でFirebaseの単一のトランザクションに複数の約束を連鎖させる方法

約束して、単一のトランザクションを使用する例があります:

var article; 
var articleRef = ref.child('blogposts').child(id); 
articleRef.once('value').then(function(snapshot) { 
    article = snapshot.val(); 
    return articleRef.child('readCount').transaction(function(current) { 
    return (current || 0) + 1; 
    }); 
}).then(function(readCountTxn) { 
    renderBlog({ 
    article: article, 
    readCount: readCountTxn.snapshot.val() 
    }); 
}, function(error) { 
    console.error(error); 
}); 

は、それはすべてが消去することができた場合にのみデータを消去することができるように1つのトランザクションにチェーン複数約束することが可能です?

答えて

4

実際にトランザクションまたは単なる操作が必要ですか?あなたは(すなわち、書き込み動作である消去)何かがそれらの一つとうまくいかない場合には失敗します同時に複数の経路上のアトミック操作を実行することができます。一方、

var ref = new Firebase("https://<YOUR-FIREBASE-APP>.firebaseio.com"); 

var updatedUserData = {}; 
updatedUserData["user/posts/location1"] = null; 
updatedUserData["user/blogs/location2"] = null; 
// Do a deep-path update 
ref.update(updatedUserData).then(function() { 
    //yay 
}, function(error) { 
    console.log("Error updating data:", error); 
}); 

取引は通常、原子データのために使用されています同時更新が不整合なデータ状態を引き起こす可能性がある変更。 upvoteカウンター想像:取引なしで

// user 1 
upvotesRef.transaction(function (current_value) { 
    return (current_value || 0) + 1; 
}); 
// user 2 
upvotesRef.transaction(function (current_value) { 
    return (current_value || 0) + 1; 
}); 

// upvotesRef will eventually be consistent with value += 2 

を、あなたは、この一貫性を保証するものではありません:賢いのです

// user 1 
ref.on("value", function(snapshot) { 
    console.log(snapshot.val()); // oops, could be the same value as user 2! 
    ref.set(snapshot.val() + 1); 
}); 
// user 2 
ref.on("value", function(snapshot) { 
    console.log(snapshot.val()); // oops, could be the same value as user 1! 
    ref.set(snapshot.val() + 1); 
}); 

詳細情報here

+0

ああ、私はあなたもそれを「削除」ができませんでした方法。 – Pier

+1

今日、私はピアがすべての答えを読んでいないことを知りました。 :-( http://stackoverflow.com/questions/38084531/firebase-bulk-delete-child-nodes/38084832#38084832 ;-) –

+0

偉大な答えbtw tommy。単に質問に答えるだけでなく、もっと簡単な方法でユースケースを解決してください。ニース! –

関連する問題