【发布时间】:2019-01-20 01:07:59
【问题描述】:
为了写入我的数据库,我将我的数据发送到一个 firebase 函数。当数据被写入时(在我看来,这将是任务完成的时候......)下一个活动应该加载并能够下载写入的数据。也许有更有效的方法可以做到这一点,但这不是重点。
我的firebase函数如下,它应该做的,除了我想早点返回任务。
注意:只有第一个“set function”需要在任务返回前写入数据库。
exports.createPostHandler = (data, context) => {
//Post
admin.database().ref('/posts/' + data.team + '/' + data.UID).set({
UID : data.UID,
sender : data.username,
user : context.auth.uid,
title : data.title,
time : data.time,
imagelink : data.imagelink,
text : data.text
}).then(() => {
console.log('User ' + context.auth.uid + ' created post ' + data.UID);
//Postcompressed
admin.database().ref('/team/' + data.team + '/posts/' + data.UID).set({
UID : data.UID,
sender : data.username,
user : context.auth.uid,
title : data.title,
time : data.time
}).then(() => {
console.log('Created compressedpost ' + data.UID + ' in team ' + data.team);
});
});
在客户端,代码如下,除了在数据写入数据库之前加载加载下一页之外,它会做它应该做的事情。如果我在写入数据几秒钟后访问“PostPage”活动,它就会起作用,所以我确信这是问题所在。
FirebaseFunctions.getInstance().getHttpsCallable("createPost").call(createDatamap(UID, title, posttext, username, time, ""))
.addOnCompleteListener(new OnCompleteListener<HttpsCallableResult>() {
@Override
public void onComplete(@NonNull Task<HttpsCallableResult> task) {
if(task.isSuccessful()) {
PostCompressed postCompressed = new PostCompressed(UID, title, username, time, null, null);
postDialog.dismiss();
Toast.makeText(context, "Du har skapat ett inlägg", Toast.LENGTH_SHORT).show();
startPostPage(postCompressed);
} else {
v.setClickable(true);
alertView.findViewById(R.id.loadview).setVisibility(View.GONE);
Toast.makeText(context, "Du kunde inte skapa ett inlägg... Något gick snett!", Toast.LENGTH_SHORT).show();
}
}
});
我的问题是'为什么函数在数据写入之前返回它的任务?写入数据时,任务不应该“完成”吗?'
【问题讨论】:
标签: android node.js firebase firebase-realtime-database google-cloud-functions