0
firebaseで生成された注文/請求書に対して、クラウド機能で一意の読み取り可能なIDが必要です。 私は、ユーザーが同時に2つの注文を送信することはできないので、uidとタイムスタンプに基づくランダムなIDは良い解決策だと思います。Firebase用のIdジェネレータアルゴリズム
あなたはどう思いますか?
私はこの主旨=>https://gist.github.com/mikelehen/3596a30bd69384624c11
を編集したそして、これが結果です:
export default (() => {
const PUSH_CHARS = 'abcdefghijklmnopqrstuvwxyz';
let lastPushTime = 0;
let lastRandChars = [];
return (uid) => {
if (uid.length != 28) throw new Error('UID length should be 28.');
let now = new Date().getTime();
const duplicateTime = (now === lastPushTime);
lastPushTime = now;
// CONVERT TimeStamp to CHARS
const timeStampChars = new Array(8);
let i;
for (i = timeStampChars.length - 1; i >= 0; i--) {
timeStampChars[i] = PUSH_CHARS.charAt(now % 36);
now = Math.floor(now/36);
}
if (now !== 0) throw new Error('We should have converted the entire timestamp.');
let id = timeStampChars.join('');
// ADD 2 random CHARS
for (i = 0; i < 2; i++) {
id += PUSH_CHARS.charAt(Math.floor(Math.random() * 36)).toLowerCase();
}
Math.max
// ADD random chars of UID
if (!duplicateTime) {
for (i = 0; i < 6; i++) {
lastRandChars[i] = Math.floor(Math.random() * 28);
}
} else {
for (i = 5; i >= 0 && lastRandChars[i] === 27; i--) {
lastRandChars[i] = 0;
}
lastRandChars[i]++;
}
for (i = 0; i < 6; i++) {
id += uid.charAt(lastRandChars[i]).toLowerCase();
}
// The id must be 16
if (id.length != 16) throw new Error('Length should be 16.');
return id;
};
})();
はい、しかしfirebaseこの=> '-JRHTHaIs-jNPLXOQivY' などのキーを生成するが、私はこの=> 'j4jo-f9v2-l6v8-srpv' として、より読みやすいのidをしたい – SaroVin
あなたはUUID 'nodejs使用することができます'libそれは良いreadbleUUIDを生成する –
私はrepoを作成した=> https://github.com/sarovin/order-id-generator – SaroVin