【发布时间】:2016-02-07 07:34:10
【问题描述】:
当推送事件发生时,它会返回一个新的密钥。
例如来自Docs:
// Generate a reference to a new location and add some data using push()
var newPostRef = postsRef.push();
// Get the unique ID generated by push()
var postID = newPostRef.key();
我想做的事:
现在我想在之后直接使用这个键来改变数据库的另一部分。
但由于 JavaScript 的异步特性,我被绊倒了。
我已经尝试了成功回调:
var newMessageIDRef = firebaseMessagesRef.push({
authorName: 'Nick',
text:"Hello!"
},printKey(newMessageIDRef));
var printKey = function(newMessageIDRef) {
console.log(newMessageIDRef);//undefined
}
(我假设在设置 newMessageIDRef 之前调用了 printKey)
我尝试过使用“then”:
var newMessageIDRef = firebaseConvosRef.push({
authorName: 'Nick',
text:"Hello!",
}).then(printKey(newMessageIDRef));
var printKey = function(newMessageIDRef) {
console.log(newMessageIDRef);//undefined
}
(我假设括号导致printKey 立即执行,这让我想知道如何添加参数但不会导致提前执行)
问题:
是否有一些传统的方法来处理如此常见的事情,或者我最好的解决方案是使用Promise 并使用resolve 处理密钥?
更新(虽然还没有回答):
下面的工作,但它没有意义。
var printKey = function(newMessageIDRef) {
console.log(newMessageIDRef);//undefined
}
var newMessageIDRef = firebaseConvosRef.push({
authorName: 'Nick',
text:"Hello!",
});
printKey(newMessageIDRef)
我认为 newMessageIDRef 不一定会在调用 printKey 时返回。
【问题讨论】:
-
为什么要记录字符串而不是变量?
-
@Bergi 这只是制作 sn-p 的意外,感谢您指出!
标签: javascript asynchronous callback firebase promise