我具有云功能,可以直接在应用程序中调用它。
我的代码:
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();
exports.sharePost = functions.https.onCall((data, context) => {
var postkey = data.text;
const uid = data.uid;
var list= [];
var db = admin.database();
var ref = db.ref("users").child(uid).child("followers");
ref.once('value', function(snapshot) {
snapshot.forEach(function(childSnapshot) {
var childKey = childSnapshot.key;
list.push(childKey);
});
var refsave = db.ref("posts");
for (var i = 0; i < list.length; i++) {
refsave.child(list[i]).update({
postkey:""
});
}
});
});
我用以下代码调用此函数:
private Task<String> sharePost(String text) {
Map<String, String> data = new HashMap<>();
data.put("text", text);
data.put("uid",auth.getUid());
return mFunctions
.getHttpsCallable("sharePost")
.call(data)
.continueWith(new Continuation<HttpsCallableResult, String>() {
@Override
public String then(@NonNull Task<HttpsCallableResult> task) throws Exception {
String result = (String) task.getResult().getData();
return result;
}
});
}
我在此任务中放置了键(-LUpD2kWvUct5KiihU4M之类的东西),我想写的是该键,但要用那个函数名而不是用变量名写数据。
此图像更好地说明了我想要的东西
答案 0 :(得分:1)
由于要更新多个值,因此可以创建更新对象并一次将其全部写入。
更新也不同于set()
。更新对象键是要更新的路径,值将写入该路径。同样,该路径是相对于您将在其上呼叫update()
的孩子的。
像这样更新您的firebase函数:
var ref = db.ref("users").child(uid).child("followers");
ref.once('value', function (snapshot) {
let update={};
snapshot.forEach(function (childSnapshot) {
var childKey = childSnapshot.key;
update[`${childKey}/${postkey}`]="THE VALUE YOU WILL STORE"
});
var refsave = db.ref("posts");
return refsave.update(update);
});
有关admin sdk中更新如何工作的更多详细信息,请参阅文档。 https://firebase.google.com/docs/reference/admin/node/admin.database.Reference#update