Javascript с выходом Promise, когда будет готов - PullRequest
1 голос
/ 25 апреля 2020

У меня есть следующий код:

console.log(1);
var pro = new Promise((resolve, reject) => {

  let myDate;
  for (let i = 0; i < 1000000; i++) {
    let date = new Date();
    myDate = date
  }
  resolve(myDate);

});
pro.then((res) => {
  console.log(res);
});
console.log(2);

//output:
//1
// after 2 seconds:
//2
// Date

число 2 журналов до даты. но он регистрирует всякий раз, когда дата готова. почему?

Поскольку мы используем asyn c для ускорения наших кодов, но в приведенном выше коде мы все еще должны ждать ... единственная разница теперь в приоритете вывода кодов.
Мой ожидаемый результат это:

1
2
// через несколько секунд:
Дата

Ответы [ 2 ]

0 голосов
/ 25 апреля 2020

Обещание будет разрешено в асинхронном режиме c, но распознаватель (код, который вы запускаете при создании обещания) выполняется сразу.

Это означает, что перед выполнением console.log(2) дорогостоящее l oop выполнен. Вот почему вы видите задержку.

Вы можете использовать setTimeout, чтобы перенести выполнение на более позднее время.

console.log(1);
var pro = new Promise((resolve, reject) => {
  setTimeout( () => {
    let myDate;
    for (let i = 0; i < 1000000; i++) {
     let date = new Date();
     myDate = date
   }
   resolve(myDate);
  }, 100)
});
pro.then((res) => {
  console.log(res);
});
console.log(2);
0 голосов
/ 25 апреля 2020

console.log(1);
var pro = new Promise((resolve, reject)=>{

let myDate; 
setTimeOut(()=>{
for(let i = 0; i < 1000000; i++) { 
    let date = new Date(); 
    myDate = date 
} 
},0)

resolve(myDate); 

});
pro.then((res)=>{
    console.log(res);
});
console.log(2);

Вы пробовали тайм-аут

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...