我有两个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()
可以在这里工作。但我不知道该怎么做。
或者其他选择对我来说还可以吗? 谢谢
答案 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);
})