Запуск функции javascript в последовательности - PullRequest
0 голосов
/ 10 марта 2020
function main(){
   function_A();
   function_B();
}
function function_A(){
   axios(....).then(res=>{console.log("get response of A")});
}
function function_B(){
   axios(....).then(res=>{console.log("get response of B")});
}

Предположим, что у меня есть основная функция для управления потоком программы, если я не могу редактировать функции A и B, как я могу запустить их последовательно (function_B должен ждать ответа function_A перед запуском)?

Ответы [ 2 ]

0 голосов
/ 10 марта 2020

Как и предложил @Smytt, вы не сможете реализовать его в настоящее время. Нам нужно отредактировать functionA() и определить что мы ждем.

Обещания выполняют в точности то, что задает ваш вопрос

function function_A(){
   return axios(....)
      .then(res => {
         console.log("get and return response of A");
         return res;
    }).catch(...);

}
function function_B(){
   axios(....).then(res => {console.log("get response of B")});
}

Вы можете назвать это как :

function_A().then(result => function_B()).catch(...);

Также обратите внимание, что ключевое слово async является необязательным для обозначения асинхронной функции, которая возвращает обещание. Это было создано, чтобы мы могли использовать асинхронные функции, как если бы они были синхронными.

async function function_A(){
   return await axios(....)
      .then(res => {
         console.log("get and return response of A");
         return res;
    }).catch(...);

}

async function function_B(){
   await axios(....).then(res => {console.log("get response of B")});
}
0 голосов
/ 10 марта 2020

То, как это в настоящее время закодировано - вы не можете. Обе функции - A и B являются синхронными. Это означает, что они будут стрелять в порядке их вызова. Однако то, что происходит внутри них, является асинхронным, и, поскольку вы не можете редактировать функцию A, вы не можете «присоединиться» к урегулированию обещания внутри нее - будь то разрешение или отклонение.

...