#javascript #node.js
#javascript #node.js
Вопрос:
Я очень новичок в nodejs, и я получаю вышеупомянутую ошибку для приведенного ниже кода. приветствуется любая помощь. спасибо.
PushNotifications.sendMessageToAll(announcement, (err,res) => {
if (err){
return res.status(500).send()
}
res.status(200).send()
}
sendMessageToAll: function (notification, cb) {
payload = {....}
admin.messaging().subscribeToTopic(tokens,topic).then((res) =>{
return admin.messaging().sendToTopic('/topics/NATA', payload)
}).then((res) =>{
console.log('sent', res)
cb(undefined,res)
}).catch((err) =>{
console.log('Subscribed error',err)
cb(err,undefined)
})
}
}
Комментарии:
1.
PushNotifications.sendMessageToAll
выполняет обратный вызов безres
параметра2. вы не включили сообщение об ошибке. Пожалуйста, укажите ошибку, а также весь необходимый соответствующий код.
3. Не могли бы вы улучшить форматирование своего кода и / или вставить больше из него? Трудно понять, что происходит прямо сейчас из-за прерывистого отступа и пустых строк. Спасибо
Ответ №1:
Ошибка, которую вы получаете, заключается в том, что свойство status
не существует в undefined
, которое передается обратно в этой строке:
cb(err,undefined)
Вызывающий ожидает response
объект, потому что он хочет использовать объект response для установки кода состояния HTTP и отправки ответа в браузер:
return res.status(500).send()
Решение простое: передать res
(сокращение от ‘response’) обратный вызов ошибки вместо undefined
:
}).catch((err) =>{
console.log('Subscribed error', err)
cb(err, res)
})
Комментарии:
1. теперь я получаю 2 ошибки
Promise rejection res is not defined
иres.status is not a function
2. Можете ли вы обновить свой исходный пост с помощью правильно отформатированного JS и полной функции / объема того, что вы создаете?
res
должно быть доступно в вашей цепочке обещаний, потому что оно (должно быть) в области функции
Ответ №2:
Вы буквально передаете undefined
свой обратный вызов cb
, который ожидает, что второй параметр будет объектом ответа
.catch((err) =>{
console.log('Subscribed error',err)
cb(err,undefined)
})
Вам нужно, чтобы ваш обратный вызов мог обрабатывать отсутствие res
для установки статуса.
Комментарии:
1. теперь я получаю 2 ошибки
Promise rejection res is not defined
иres.status is not a function
Ответ №3:
В catch
блоке вашего обещания вы вызываете обратный вызов без res
ввода:
admin.messaging().subscribeToTopic(tokens,topic).then((res) =>{
return admin.messaging().sendToTopic('/topics/NATA', payload)
}).then((res) =>{
console.log('sent', res)
cb(undefined,res)
}).catch((err) =>{
console.log('Subscribed error',err)
cb(err,undefined) // <-- HERE the second param is res!
})
}
}
Редактировать
res
не определено в catch
блоке. Способ может быть:
let outerRes;
admin.messaging().subscribeToTopic(tokens,topic).then((res) =>{
outerRes = admin.messaging().sendToTopic('/topics/NATA', payload)
return outerRes;
}).then((res) =>{
console.log('sent', res)
cb(undefined,res)
}).catch((err) =>{
console.log('Subscribed error',err)
cb(err,outerRes) // <-- HERE the second param is res!
})
}
}
Комментарии:
1. теперь я получаю 2 ошибки
Promise rejection res is not defined
иres.status is not a function
2. Это потому, что res не является частью ввода catch. смотрите мою правку