Получение ошибки при попытке использовать Promise - PullRequest
0 голосов
/ 06 ноября 2018

Я не уверен, является ли этот вопрос слишком конкретным. Я использую Firebase внутри функции, которая обновляет базу данных:

UpdatePeerNotification = (content) => {
        firebase.database().ref('users').child(this.props.match.params.username).
        .update('something)
    }

Если я назову его как обычно this.updatePeerNotification ('abc'); работает Но при попытке использовать

Promise(this.updatePeerNotification('abc')).then(() => do something)) 

Или

this.updatePeerNotification('abc').then(() => do something))

выдает следующую ошибку: Необработанный отказ (TypeError): undefined не является обещанием

Как может случиться, что вызов функции работает регулярно, но присоединение .then приводит к этой ошибке. Также после обновления страницы функция вызывается без ошибки

Заранее большое спасибо!

Ответы [ 3 ]

0 голосов
/ 06 ноября 2018

Вы не возвращаете обещание (или что-либо еще) из UpdatePeerNotification, что приводит к тому, что вызывающая сторона пытается вызвать then на undefined (возвращаемое значение по умолчанию для функций, не возвращающих никакого значения).

Возможно, вы хотите вернуть результат update(), который является обещанием, которое разрешается после завершения обновления на сервере:

UpdatePeerNotification = (content) => {
    return firebase.database().ref('users').child(this.props.match.params.username).
        .update('something)
}
0 голосов
/ 06 ноября 2018

Каждый раз, когда вы используете Promise, вы должны либо разрешить его, либо отклонить в зависимости от вашей ситуации. Вы можете сделать это только тогда, когда справитесь с этим. В целях отладки я лично использую консоль Chrome, чтобы увидеть статус обещания. Поэтому я бы порекомендовал проверить статус Promise в вашей следующей функции.

UpdatePeerNotification = (content) => {
    return firebase.database().ref('users').child(this.props.match.params.username).
        .update('something)
}
Один пример проверки статуса Promise здесь:

var promise1 = new Promise(function(resolve,reject){
  resolve(23);
});

promise1.then(function(value) {
  console.log(value);
  /* expected output: 23
  Promise {<resolved>: undefined}
__proto__: Promise
[[PromiseStatus]]: "resolved"
[[PromiseValue]]: undefined
*/
});
0 голосов
/ 06 ноября 2018

Когда типом возврата является Promise, вы должны обработать отклонение в методе

      updatePeerNotification('abc').then(() => dosomething).catch(function (error){return Promise.reject(error)}))

Это должно помочь.

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