我确定这是一个简单的问题,但我不知道如何解决它。
我有两个函数和javascript(nodejs)中的对象,如下所示:
class WordItem extends Component {
constructor(props) {
super(props);
this.onPressIcon = this.onPressIcon.bind(this);
this.state = {
dataSource: new ListView.DataSource({
rowHasChanged: (row1, row2) => row1 !== row2,
}),
}
}
onPressIcon(word){
var config = {
apiKey: "",
authDomain: "",
databaseURL: ""
};
var ref = firebase.database().ref();
let childItem = word+"/likes";
console.log(childItem, "childItem")
var likes_words = ref.child("items").child(word).child("likes");
likes_words.transaction(function(currentLike) {
return currentLike + 1;
});
// Sync Object Changes
likes_words.on('value', function (snap){
???
});
}
我的问题是,如果我可以执行该功能,请等到功能二完成执行,就像在C#程序中一样,以及我如何做到这一点。
答案 0 :(得分:0)
是的,你可以!您可能知道,节点执行I / O的所有操作异步(这是其主要优势之一)。因此,为了满足您的要求,您应该查看回调和承诺。由于社区目前正在接受承诺,我将在这里留下这个链接,以便您可以了解更多关于它们的信息:
对于您的具体情况,我将在此提供基于承诺的简单解决方案:
var auxmap = new Map();
function one(){
for(var i...){
//init map and do something
two(i,params).then(function(){ //Function one waits for two to end
//do something or end
});
}
}
function two(i,params){
return new Promise(function(resolve, reject){
//create array from params called auxarray
map(i) = auxarray;
resolve('Two finished');
}
}
希望这有帮助!