如何使用Promise all()同时执行两个功能?

时间:2018-12-06 15:55:01

标签: javascript ajax es6-promise

我有两个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 :(得分:1)

Promise.all接受一个Promise数组,其本身返回一个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]);
  });
}

答案 1 :(得分:0)

您可以一个接一个地执行以同时执行,也可以创建Promise.all([])来使用。

但是我认为您不需要这样做。

这是一个使用Promises的示例,您可以阅读更多here

方法参数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!');
  });

答案 2 :(得分:0)

您可以使用Promise.all来处理多个并行运行的Promise。

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