почему моя функция вызываемого облака всегда будет не работать, даже если она завершена с кодом состояния 200? - PullRequest
0 голосов
/ 03 февраля 2020

, поэтому у меня есть функция вызываемого облака, подобная этой

exports.callableModeratorSendNotification = functions.https.onCall(async (data, context) => {

    try {

        const platform = data.platform
        const priority = data.priority
        const message =  data.message
        const moderatorID = context.auth.uid

        // check if moderator have authorization to  send notification and check if moderator is active or not
        const moderatorSnapshot = await db.doc(`moderators/${moderatorID}`).get()
        const moderator = moderatorSnapshot.data()

        if ( !moderator.canSendNotification || !moderator.isActive) {
            throw new functions.https.HttpsError('invalid-moderator', 'Moderator is invalid. only active moderator who has authorization that can verify a user.')
        }

        let query

        const now = new Date()
        const xMonthsAgo = moment().subtract(1,"months").toDate()


        query = db.collection(`devices`)
        .where("lastActivity","<=",now)
        .where("lastActivity",">=",xMonthsAgo)

        if ( platform !== "All") {
            query = query.where("platform","==",platform) // iOS or Android
        }

        const devicesQuerySnapshot = await query.get()

        devicesQuerySnapshot.docs.forEach( deviceSnapshot => {

            const device = deviceSnapshot.data()
            console.log(device.userID)



        })

        {result: 'success'}


    } catch(error) {
        console.log(error)
        return null
    }



})

, на данный момент эта функция просто регистрирует идентификатор пользователя. и эта функция вернет 200 таких кодов в консоли

enter image description here

, но проблема на стороне клиента .... Я использую Android Чтобы вызвать эту функцию, например,

fun sendNotification(platform: String, priority: String, message: String) : Task<String> {

        // Create the arguments to the callable function.
        val data = hashMapOf(
            "platform" to platform,
            "priority" to priority,
            "message" to message
        )

        return functions
            .getHttpsCallable("callableModeratorSendNotification")
            .call(data)
            .continueWith { task ->
                val result = task.result?.data as String
                result
            }

    }

, а затем использовать ее следующим образом

sendNotification(selectedPlatform,selectedPriority,message).addOnSuccessListener {

    toast("successful")

}.addOnFailureListener {

    toast("failed")
}

проблема в том, что, хотя код состояния в консоли равен 200, но addOnFailureListener всегда будет называться Я ожидаю, что addOnSuccessListener будет вызван, если ответ 200

. Вот исключение, пойманное прослушивателем ошибок

java .util.HashMap не может быть приведен к java .lang.String 2020-02-04 11: 30: 09.023 26024-26024 / com.

java .lang.ClassCastException: java .util.HashMap нельзя привести к java. lang.String

в этой строке?

val result = task.result?.data as String

откуда берется результат. это представляет return на моей вызываемой функции? Я предполагаю, что вызываемая функция должна возвращать обещание, такое как триггер облачной функции

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...