JS:如何推迟执行函数

时间:2018-05-12 13:25:52

标签: javascript vuejs2 vue-component

尝试挂载Vue.js组件,但似乎第二个函数(eventSelection)之前被调用。我应该怎么做才能在第一个函数完成后才执行它?

...
mounted() {
  this.getAllEvents()
  this.eventSelection()
},

methods: {
  getAllEvents: function () {
    console.log("Cheguei aqui");
    getEvents()
    .then( function (res) {
      console.log("Entrei then")
      this.events = res.data
    }.bind(this))
    .catch( function (err){
      debugger;
      console.error('WeekSimulation, getEvents() ', err)
      this.events = ["Seu chefe o convida para um happy hour com os diretores no final do expediente.  Ao mesmo tempo, você recebe uma mensagem de seu cônjuge lembrando da apresentação no colégio do seu filho. O que você faz?", "Você tem muito trabalho a fazer, porém o tempo com sua família anda escasso. No final do expediente você escolheria jantar com sua família ou fazer hora extra?",
                         "Você acorda de manhã e seu filho não está se sentindo bem. Ao verificar sua agenda, lembra que tem uma reunião com um novo cliente em uma hora. Você leva seu filho ao médico ou vai para a reunião?", 
                         "Ao checar o seu celular durante uma reunião com os diretores de sua organização, nota que recebeu cinco ligações de seu cônjuge. Você continua na reunião, ou pede para atender o telefone?"]
    }.bind(this))
  },

  eventSelection: function() {
    console.log("Funcao de selecao de evento")
    debugger;
    this.selectedEvent = _.shuffle(this.events)[0]
    console.log(this.selectedEvent)
  }      

}
...

3 个答案:

答案 0 :(得分:4)

getEvents()返回getAllEvents()承诺,以便您可以将另一个then()链接到它,并在getEvents()结算后调用eventSelection()

mounted() {
  this.getAllEvents().then(this.eventSelection)

},

methods: {
  getAllEvents: function () {
   // return the promise
   return getEvents()
    .then( function (res) {
      ....
    }.bind(this))


}

另外,请确保在return this.events中添加catch以解决初始承诺

答案 1 :(得分:-1)

您需要使用promises()。 我无法理解你的代码,道歉,这是一个通用的例子:

first = function(){
    var deferred = new $.Deferred();
    console.log("first running");
    deferred.resolve();  // <----------resolve the deferred
    return deferred.promise();
}

second = function(){
    console.log("second running..sigh..");
}

$(document).ready(function() {

    first().then(second);

});

答案 2 :(得分:-2)

使用简单的回调:

 mounted() {
   this.getAllEvents(this.eventSelection);
 }

 getAllEvents: function (cb) {
    ...
    cb();
 },

  eventSelection: function() {
   ...
  }