从 Firebase 获取一个值并用当前值 + 1 更新它
Get a value from Firebase and update it with the current value + 1
是的,标题有问题。一些信息这就是我的 Firebase 数据库的样子:
这是当前代码:
export function updateQTY(barcode) {
database.ref('items/' + barcode).update({
qty: currentQTY(barcode)
})
}
export function currentQTY(barcode) {
database.ref('items/' + barcode).once('value').then(function(snapshot) {
var qty = snapshot.val().qty
console.log(qty)
})
return qty + 1
}
基本上,我想要的是将 qty + 1 returned 到函数 updateQTY
。
也许我必须采用完全不同的方式,但这没关系,我只是不知道该怎么做。我知道实际获取当前数量的函数必须 return 它,但后来我不明白如何在另一个函数中捕获它。
你不能return一个不会立即可用的值,所以currentQTY
需要return一个承诺对于新数量;然后,在 updateQTY
中,等待该承诺实现,然后 然后 更新数据。
export function updateQTY(barcode) {
return currentQTY(barcode)
.then(qty => database.ref('items/' + barcode).update({qty}));
)
export function currentQTY(barcode): Promise<number> {
return database.ref('items/' + barcode).once('value')
.then(snapshot => snapshot.val().qty + 1);
}
如果可以使用async/await:
export async function updateQTY(barcode) {
const qty = await currentQTY(barcode);
database.ref('items/' + barcode).update({qty}));
)
甚至
export async function updateQTY(barcode) {
database.ref('items/' + barcode).update({qty: await currentQTY(barcode)});
)
但是,您可以使用事务更轻松、更可靠地完成此操作:
export function updateQTY(barcode) {
return database.ref('items/' + barcode).transaction(data => {
data.qty++;
return data;
});
}
或者如果您愿意
export function updateQTY(barcode) {
return database.ref(`items/{$barcode}/qty`).transaction(qty => qty++);
}
使用事务的优点是可以正确处理多个用户同时尝试更新数据的情况。有关详细信息,请参阅 documentation.
是的,标题有问题。一些信息这就是我的 Firebase 数据库的样子:
这是当前代码:
export function updateQTY(barcode) {
database.ref('items/' + barcode).update({
qty: currentQTY(barcode)
})
}
export function currentQTY(barcode) {
database.ref('items/' + barcode).once('value').then(function(snapshot) {
var qty = snapshot.val().qty
console.log(qty)
})
return qty + 1
}
基本上,我想要的是将 qty + 1 returned 到函数 updateQTY
。
也许我必须采用完全不同的方式,但这没关系,我只是不知道该怎么做。我知道实际获取当前数量的函数必须 return 它,但后来我不明白如何在另一个函数中捕获它。
你不能return一个不会立即可用的值,所以currentQTY
需要return一个承诺对于新数量;然后,在 updateQTY
中,等待该承诺实现,然后 然后 更新数据。
export function updateQTY(barcode) {
return currentQTY(barcode)
.then(qty => database.ref('items/' + barcode).update({qty}));
)
export function currentQTY(barcode): Promise<number> {
return database.ref('items/' + barcode).once('value')
.then(snapshot => snapshot.val().qty + 1);
}
如果可以使用async/await:
export async function updateQTY(barcode) {
const qty = await currentQTY(barcode);
database.ref('items/' + barcode).update({qty}));
)
甚至
export async function updateQTY(barcode) {
database.ref('items/' + barcode).update({qty: await currentQTY(barcode)});
)
但是,您可以使用事务更轻松、更可靠地完成此操作:
export function updateQTY(barcode) {
return database.ref('items/' + barcode).transaction(data => {
data.qty++;
return data;
});
}
或者如果您愿意
export function updateQTY(barcode) {
return database.ref(`items/{$barcode}/qty`).transaction(qty => qty++);
}
使用事务的优点是可以正确处理多个用户同时尝试更新数据的情况。有关详细信息,请参阅 documentation.