Как использовать Promise all () для выполнения обеих функций одновременно? - PullRequest
0 голосов
/ 06 декабря 2018

У меня есть две функции ajax: должны работать вместе.

        getCountryList: function () {
            var self = this;
            App.elementService.getCountries().then(function (countriesList) {
                self.countryData = countriesList;
            });
        },

        getData: function () {
            var self = this;
            this.getElementTypeSchema(App.variable.SelectedCustomerName).then(function (elementTypeValues) {
                self.elementTypeData = elementTypeValues;
                self.render(elementTypeValues);
            });
        }, 

getCountryList() должен выполнить before self.render(elementTypeValues) or at the same time, а getData() выполнить.После поиска об обещании я обнаружил, что Promise.all() может работать здесь.но я не знаю как это сделать.

или любой другой вариант мне подойдет?Спасибо

Ответы [ 3 ]

0 голосов
/ 06 декабря 2018

Promise.all принимает массив обещаний, который сам по себе возвращает Promise, который имеет массив результатов в разрешенной функции.

getAllData: function() {
  var self = this;
  Promise.all([
    App.elementService.getCountries(),
    self.getElementTypeSchema(App.variable.SelectedCustomerName)
  ]).then(function(res) {
    self.countryData = res[0];
    self.elementTypeData = res[1];
    self.render(res[1]);
  });
}
0 голосов
/ 06 декабря 2018

Вы можете использовать Promise.all для обработки нескольких обещаний, выполняемых параллельно.

const promise1 = () => {
  return new Promise( (resolve, reject) => {
    setTimeout( () => {
      resolve('promise1')
    }, 1000)
  })
}

const promise2 = () => {
  return new Promise( (resolve, reject) => {
    setTimeout( () => {
      resolve('promise2')
    }, 1000)
  })
}

const promise3 = () => {
  return new Promise( (resolve, reject) => {
    setTimeout( () => {
      resolve('promise3')
    }, 1000)
  })
}

Promise.all([promise1(), promise2(), promise3()])
.then( (res) => {
  console.log('Res: ', res);
})
.catch( err => {
  console.log('Error: ', err);
})
0 голосов
/ 06 декабря 2018

Вы можете выполнять одно за другим для одновременного выполнения или создавать Promises для использования Promise.all ([]).

Но я думаю, что вам это не нужно для того, что вы хотите сделать.

Это пример использования Promises, вы можете прочитать больше здесь .

Параметр метода resolve используется, чтобы сообщить Promise, что вы уже завершили выполнение..

var fun1 = new Promise(function(resolve, reject) {
  console.log('fun1');
  resolve();
});

var fun2 = new Promise(function(resolve, reject) {
  console.log('fun2');
  resolve();
});


Promise.all([fun1, fun2])
  .then(function() {
    console.log('success!');
  });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...