我不确定这个问题是否太具体。我在更新数据库的函数中使用firebase:
UpdatePeerNotification = (content) => {
firebase.database().ref('users').child(this.props.match.params.username).
.update('something)
}
如果我通常这样称呼它。updatePeerNotification('abc');它正在工作 但是当尝试使用
Promise(this.updatePeerNotification('abc')).then(() => do something))
或
this.updatePeerNotification('abc').then(() => do something))
它引发以下错误: 未处理的拒绝(TypeError):未定义不是承诺
怎么可能定期调用该函数,但是附加.then却得到该错误。另外,刷新页面后,该函数被调用而没有错误
非常感谢!
答案 0 :(得分:2)
您没有从UpdatePeerNotification
返回承诺(或其他任何东西),这导致调用者尝试在then
上调用undefined
(函数不返回的默认返回值任何值)。
您可能正在寻找返回update()
的结果,这是一个承诺,可以在服务器上完成更新时解决:
UpdatePeerNotification = (content) => {
return firebase.database().ref('users').child(this.props.match.params.username).
.update('something)
}
答案 1 :(得分:0)
当返回类型为Promise时,您应该使用方法处理拒绝
updatePeerNotification('abc').then(() => dosomething).catch(function (error){return Promise.reject(error)}))
这应该有帮助。
答案 2 :(得分:0)
每次使用Promise时,您都必须根据自己的情况解决它或拒绝它。处理之后,您只能执行.then。出于调试目的,我个人使用chrome控制台查看承诺状态。因此,我只建议您在以下功能中检查Promise的状态。
UpdatePeerNotification = (content) => {
return firebase.database().ref('users').child(this.props.match.params.username).
.update('something)
}
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
*/
});