Как обеспечить порядок выполнения в TypeScript - PullRequest
0 голосов
/ 26 декабря 2018

Я пытаюсь реализовать некоторые функции, когда у меня возникает проблема с порядком выполнения в машинописи:

код:

new Promise((resolve) => {
          setTimeout(()=>{
            console.log("function11111");
            resolve();
          }
          ,3000);      
          
        })
        .then(_=>{
          setTimeout(()=>{
            console.log("function22222");
          }
          ,2000);   
        })
        .then(_=>{
          setTimeout(()=>{
            console.log("function3333333");
          }
          ,1000);   
        }) 

Выход:

function11111
function33333
function22222

Мои вопросы:

1) для function1111, если мы заменим этот console.log ('fucntion1111') функцией, которая занимает несколько секунд, в этом случае мой код будет запускать функцию resolol () до того, как функция завершит свое выполнение, так как обеспечить ожидание моей функции

2) В моем кодеЯ делаю тогда, почему исполнение не уважает мой заказ?Я думал, что обещание создано для этой цели.

1 Ответ

0 голосов
/ 26 декабря 2018

Проблема в том, что все обработчики then вызываются одновременно после вызова начального resolve().И так как каждый из них имеет различное время ожидания, отсюда и порядок вывода: function33333 and then functon2222.

. Для поддержания порядка вы можете выполнить цепочку обещаний, которая будет ждать, пока предыдущий promise не получит разрешение, прежде чем вызывать следующий.then() блок.

Я приковал цепи обещаниями.Дайте мне знать, если вам нужно больше разъяснений.

new Promise((resolve) => {
      setTimeout(()=>{
        console.log("function11111");
        resolve();
      }
      ,3000);

    })
    .then(_=> new Promise(resolve => {
      setTimeout(()=>{
        console.log("function22222");
        resolve();
      }
      ,2000);
      })
    )
    .then(_=> new Promise(resolve => {
      setTimeout(()=>{
        console.log("function3333333");
        resolve();
      }
      ,1000);
      })
    );
...