gpt4 book ai didi

javascript - Firebase onwrite 函数仅更改值一次

转载 作者:行者123 更新时间:2023-12-01 03:28:09 27 4
gpt4 key购买 nike

我部署了一个简单的 Firebase 函数,如下所示,这是我从 Google 开发人员那里学到的。它的简单目的是每当有人将 1111 写入数据库中的“值”字段时将其更改为某些文本,但我的问题是此函数仅在创建数据字段时更改值一次,创建后它不会执行任何操作,例如如果用户输入 1111 它会发生变化,但如果用户输入 2222,然后输入 1111,则不会发生任何情况。我应该在代码中更改什么?

提前致谢。

const functions = require('firebase-functions');

exports.sanitizePost=functions.database
.ref('/users/{uid}')
.onWrite(event =>{
const post =event.data.val()
if(post.sanitized){
return
}
post.sanitized=true
post.value=sanitize(post.value)
const promise = event.data.ref.set(post)
return promise
})
function sanitize(s){
var sanitizedText = s
sanitizedText = sanitizedText.replace("1111", "Congratz, you won!")
return sanitizedText
}

还在我的 java 客户端添加了一个函数,该函数在数据库更改后将 sanitized 更改为 false。

我的java类

import android.content.Context;
import android.widget.Toast;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;

import static com.facebook.FacebookSdk.getApplicationContext;


public class database{

private DatabaseReference mDatabase;
private FirebaseDatabase database;


public void kullanicikontrol(String kullaniciadi,DatabaseReference mDatabase,String value){


mDatabase.child("users").child(kullaniciadi).child("value").setValue(value);
mDatabase.child("users").child(kullaniciadi).child("sanitized").setValue("false");


Context context = getApplicationContext();
CharSequence text = kullaniciadi;
int duration = Toast.LENGTH_LONG;

Toast toast = Toast.makeText(context, text, duration);
toast.show();

}
public void kullanicikontrol(String kullaniciadi,DatabaseReference mDatabase){


mDatabase.child("users").child(kullaniciadi).child("status").setValue("no");
}
}

最佳答案

这相当简单。你是

if(post.sanitized){
return
}

然后设置:

post.sanitized=true   

因此,当您对帖子进行更改时,它已经被清理,因此只需从第一个语句返回即可。

使其重新触发的最简单方法是删除该检查。 但这将导致不断的重新触发,因为您正在写入数据,这将再次触发该函数。本质上是无限循环的 Cloud Functions 变体。对于这些类型的触发函数,确保对何时完成有明确的定义非常重要。

在这种情况下,您可以将“完成”定义为:无需进行进一步的清理:

exports.sanitizePost=functions.database
.ref('/users/{uid}')
.onWrite(event =>{
const post =event.data.val()
const oldValue = post.value
post.value=sanitize(post.value)
if (post.value !== oldValue) {
const promise = event.data.ref.set(post)
return promise
}
else {
return
}
})

关于javascript - Firebase onwrite 函数仅更改值一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44682839/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com