Какое исполнение обещаний в браузерах, что случилось? - PullRequest
1 голос
/ 15 апреля 2020
const b = () => {
  return new Promise(resolve => {
    resolve();
    Promise.resolve()
      .then(() => {
        console.log(1);
      })
      .then(() => console.log(3));
  });
};

const a = async () => {
  await b();
  console.log(2);
};

a();

Различное поведение в сафари, chrome (firefox), любой стандарт, описанный по этому поводу?

1 Ответ

1 голос
/ 15 апреля 2020

Здесь у вас есть две совершенно независимые цепочки обещаний:

Promise.resolve()
  .then(() => {
    console.log(1);
  })
  .then(() => console.log(3));


(async () => {
  await new Promise(resolve => {
    resolve();
  });
  console.log(2);
}());

Нет другого гарантированного заказа, если 3 происходит после 1. На остальное влияет то, как точные обратные вызовы в очереди ставятся в очередь, и изменилось значение spe c из await (исключая одну ненужную процедуру разрешения с возможностью последующего использования), которое, вероятно, еще не реализовано в Safari. двигатель.

...