У меня есть фрагмент, с которым я играю, где я специально поместил Promise.resolve(c)
до Promise.resolve(a)
, но я замечаю, что значение true
снизу Promise.all(...)
регистрируется первым.
const https = require('https');
function getData(substr) {
let url = ``;
return new Promise((resolve, reject) => {
try {
https.get(url, res => {
let s = '';
res.on('data', (d) => {
s += d
});
res.on('end', () => {
let data = JSON.parse(s);
resolve(data);
})
})
} catch (e) {
reject(e);
}
})
}
let a = getData('spiderman');
let b;
let c = getData('superman');
Promise.resolve(c)
.then(value => console.log(value));
Promise.resolve(a)
.then(value => b = value);
Promise.all([a]).then(values => console.log(values[0] === b));
Есть ли объяснение, почему это так? Я бы подумал, что поскольку Promise.resolve(c)
стоит первым, то Promise c
разрешится первым и будет зарегистрировано. Или нет способа фактически полагаться на порядок журналов, кроме использования обратных вызовов? Каковы лучшие методы, чтобы избежать таких проблем?