🙆

Firebase Functions にて、Undefinedがnullと認識してくれないけど、nullなんだよね。

2023/01/23に公開

firebase functions を使用している際に必ず遭遇した内容であるだろう

undefined

について話します。

こいつ、nullなんだけど、nullじゃないっぽい。

例えば、下記のような作成時にトリガーを発火させる関数があったとして、

exports.chatCreated = functions
  .region("asia-northeast1")
  .firestore.document('chat_rooms/{chatRoomId}')
  .onCreate(async (snap, context) => {
    const obakeTestId = snap.data()['obakeId'];
  })

例えば、obakeIdみたいな変数がmapで格納されていない場合、
変数名:obakeTestId
こいつに入るのは、undefinedなんです。

で、こいつをどっかのmapとかに突っ込んだとしたら、エラーが返ってくるんですよね。こんな感じで↓

const obakeTestId = snap.data()['obakeId'];
const map = {
  'obakeId': obakeTestId,
}

Error: Update() requires either a single JavaScript object or an alternating list of field/value pairs that can be followed by an optional precondition. Value for argument "dataOrField" is not a valid Firestore value. Cannot use "undefined" as a Firestore value (found in field "obakeId"). If you want to ignore undefined values, enable ignoreUndefinedProperties.

found in field "obakeId"

多分こいつが重要で、obakeIdなんてねーぞ。だから使うなよみたいな感じのイメージ感。

でも、謎に下記はtrueが返ってくる

const obakeTestId = snap.data()['obakeId'];
console.log(obakeTestId == null) // ← trueが返る

フッシギー。使えないのに使えるという。

Discussion