Конструктор всегда будет работать синхронно. В дополнение к этому вам не нужен явный анти-шаблон конструкции Promise, поэтому вы все равно не захотите вызывать resolve
внутри Promise.all
. Promise.all([p1,p2])
будет обещанием, которое разрешается, когда разрешены и p1
, и p2
, поэтому присвойте это свойство экземпляру и вызовите .then
для этого свойства. Измените
Promise.all([p1,p2]).then(function(value){
// ...
});
на
this.apiPromises = Promise.all([p1,p2]);
и, при создании экземпляра:
$(function() {
const myInstance = new MyClass();
myInstance.apiPromises
.then(function (value) {
console.log("finish all");
})
.catch((error) => {
// handle errors
});
});
(Если вы не вызываете ни один из resolve
s с чем-либо в p1
или p2
, лучше всего удалить параметр value
, так как он не содержит никакой полезной информации)
$.ajax
возвращает уже доступное значение, поэтому вам не нужно вызывать new Promise
при создании p1
и p2
s:
var p1 = $.ajax({
type: "GET",
url: api1, // remember to put commas after values in an object to avoid a SyntaxError
success: function(response) {
console.log(response);
}
});
var p2 = $.ajax({
type: "GET",
url: api2, // remember to put commas after values in an object to avoid a SyntaxError
success: function(response) {
console.log(response);
}
});
(использование вышеуказанного также правильно отклонит Promise.all
при возникновении ошибки)