等待函数在Javascript中的另一个函数内结束

时间:2017-07-13 09:54:06

标签: javascript node.js

我确定这是一个简单的问题,但我不知道如何解决它。

我有两个函数和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#程序中一样,以及我如何做到这一点。

1 个答案:

答案 0 :(得分:0)

是的,你可以!您可能知道,节点执行I / O的所有操作异步(这是其主要优势之一)。因此,为了满足您的要求,您应该查看回调承诺。由于社区目前正在接受承诺,我将在这里留下这个链接,以便您可以了解更多关于它们的信息:

Javascript Promises

对于您的具体情况,我将在此提供基于承诺的简单解决方案:

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');
 }
}

希望这有帮助!