во втором файле (сервере), вы написали это:
return new Promise(function(resolve, reject) {
let data = new Data();
resolve(data.array);
});
Хорошо, я подозреваю, что на основании первого файла конструктор данных вызывает функцию "async":
this.checkIfPageExists();
Эта функция вызывает axios.get, я предполагаю, что это обещание, и выполнение конструктора продолжается до ответа checkIfPageExists, в основном во втором файле, когда вы пишете:
let data = new Data();
resolve(data.array);
Выполняет разрешение без ответа.
Вам нужно переписать эту логику для ожидания, чтобы пообещать разрешение / отклонение.
Например:
const axios = require('axios');
class Data {
constructor() {
this.array = [];
// --- FIX: No check in this line ---
}
get array() {
if (this.array.length > 0) {
return this.array;
}
}
checkIfPageExists() {
// return a promise:
return new Promise((resolve, reject) => {
axios.get('http://external.api.address/status')
.then(response => {
if (response.status === 200) {
this.fetchData().then(()=>{ resolve(); });
}
})
});
}
fetchData() {
// return the promise:
return axios.get('http://external.api.address/data')
.then(response => {
if (response.data.length > 0) {
this.array = response.data;
}
})
}
}
module.exports = Data;
Ввторой файл, изменяющийся:
const myPromise = () => {
return new Promise(function(resolve, reject) {
let data = new Data();
data.checkIfPageExists().then(()=>{
resolve(data.array);
})
});
}
Но это только пример, возможно, вам следует пересмотреть структуру кода в целом, чтобы адаптировать его.
В резюме вы всегда ждете ответов на обещания, если вы не выполняете функцию res.send () для экспресс-запроса http, никогда не отвечаете.