source

Firebase.update 실패: 첫 번째 인수가 속성에 정의되지 않았습니다.

nicesource 2023. 6. 13. 22:25
반응형

Firebase.update 실패: 첫 번째 인수가 속성에 정의되지 않았습니다.

데이터를 업데이트하는 간단한 Firebase 기능이 있습니다.그러나 해석자는 첫 번째 인수가 'users.tester1' 속성에 "undefined"가 포함되어 있다고 말합니다.누가 좀 도와주시겠습니까?

var objify = function() {
  var rv = {};
    for (var i = 0; i < arguments.length; ++i)
      rv[arguments[i]] = rv[arguments[i+1]];
    return rv;
}

    addUser("tester1", []);

var addUser = function(name, edges){
  if(!checkIfUsernameExists(name) && !checkIfNodeNameExists(name) && !checkIfEdgeNameExists(name)){
    var time = Firebase.ServerValue.TIMESTAMP;

    //HERE: I think the error is on this line 
    refs.users.update(objify(name, "filler"));

    refs.users.child(name).set({
      "id" : time,
      "edges" : "filler"
    });
    refs.users.child(name).child("edges").update({
      "to" : "filler",
      "from" : "filler"
    });

    addNode(new Node(name, time, name));

    for(var e in edges){
      refs.users.child(name).child("edges/to").update(objify(edges[e].name, true));
      addEdge(new Edge(edges[e].name, time, edges[e].to, edges[e].arrows));
      //TODO add a "from" edge so that you know who wants to eat you
    }
    refs.users.child(name).child("edges/to").set({"filler" : null});
  } else {
    alert("user/node/edge name taken.");
  }
};

개체를 Firebase로 전달할 때 속성 값은 값이거나 null일 수 있습니다(이 경우 속성이 제거됨).그들은 그럴 수 없습니다.undefined그것이 당신이 오류에 따라 전달하고 있는 것입니다.

이 스니펫을 단독으로 실행하는 것만으로도 문제가 나타납니다.

var objify = function() {
  var rv = {};
    for (var i = 0; i < arguments.length; ++i)
      rv[arguments[i]] = rv[arguments[i+1]];
    return rv;
}
objify("name", "filler")

결과:

{name: 정의되지 않음, 채우기: 정의되지 않음}

키/값 쌍을 에 전달하는 것이 가장 좋습니다.objify짝수/홀수 매개 변수.이 경우 기능을 다음으로 변경할 수 있습니다.

var objify = function() {
  var rv = {};
    for (var i = 0; i < arguments.length; i+=2)
      rv[arguments[i]] = arguments[i+1];
    return rv;
}
objify("name", "filler")

결과:

{name: "filename"}

개체에 정의되지 않은 소품이 없는지 확인하려면 다음과 같은 간단한 방법을 사용합니다.

JSON.parse( JSON.stringify(YourJsonData ) )

자세한 내용은 다음 코드를 참조하십시오.펜: http://codepen.io/ajmueller/pen/gLaBLX

정의되지 않은 값으로 속성을 업데이트하려고 하면 기본 Firebase 라이브러리에서 오류가 발생합니다.null을 허용하고 기본적으로 무시합니다.

원시 변환기가 모든 프로토타입 메서드 및 속성을 무시하고 정의되지 않은 값을 null로 변환하거나 정의되지 않은 값을 가진 속성을 모두 제거하도록 하려면 원시 변환기가 필요합니다.

var addUser = function(name, edges){
  if(!checkIfUsernameExists(name) && !checkIfNodeNameExists(name) && !checkIfEdgeNameExists(name)){
    var time = Firebase.ServerValue.TIMESTAMP;

    //HERE: I think the error is on this line 
    refs.users.update(objify(name, "filler"));

    refs.users.child(name).set({
      "id" : time || null,
      "edges" : "filler" || null
    });
    refs.users.child(name).child("edges").update({
      "to" : "filler" || null,
      "from" : "filler" || null
    });

    addNode(new Node(name, time, name));

위에서 말한 것처럼, 당신은 모든 것이 필요합니다.undefined될 가치null방화벽에 빈 값으로 저장하려면 이 옵션을 선택합니다.

모든 중첩 값을 수정하기 위해 이 방법을 사용합니다.

  //to search and replace    
    const replaceAll  =(s="",f="",r="")=>  s.replace(new RegExp(f.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'), 'g'), r)

    //to save 
   firebase.database().ref(`path`).update(JSON.parse(replaceAll(JSON.stringify(val),"undefined","null")))

사용했습니다.Object.keys()방법:

var key1 = Object.keys(firstPaymentsData)[0],
    key2 = Object.keys(firstPaymentsData[key1])[0],
    uid  = firstPaymentsData[key1][key2].uid;

언급URL : https://stackoverflow.com/questions/34708566/firebase-update-failed-first-argument-contains-undefined-in-property

반응형