Как способ обратного вызова в асинхронном программировании обеспечивает выполнение функции обратного вызова только после выполнения асинхронного задания? - PullRequest
0 голосов
/ 12 апреля 2020

Скажем, мне нужно выполнить асинхронную задачу (вызов AJAX), а затем запустить функцию обратного вызова. Способ кодирования обратного вызова, который я видел в Интернете до сих пор:

const myAsynchronousFunction = (data, callback) => {
  ajaxCall(data);
  callback();
}

Обеспечивает ли эта функция выполнение обратного вызова после вызова ajax? Если нет, то как? Если да, то как это обеспечивает выполнение вышеуказанного кода синхронно.

Ответы [ 2 ]

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

Нет, вам нужно вызвать обратный вызов внутри ajax обратного вызова. Функция обратного вызова ajax запускается только после завершения запроса ajax. Поэтому добавьте logi c, который вы хотите, после ajax внутри его обратного вызова.

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

В вашем примере это будет выполняться асинхронно. callback будет выполнено до завершения ajaxCall.

Чтобы обеспечить обратный вызов после вызова ajax, вы можете использовать async await следующим образом:

const myAsynchronousFunction = async (data, callback) => {
  await ajaxCall(data);
  callback();
}

Обратите внимание на ключевые слова async и await. Это обеспечит выполнение обещания ajaxCall до выполнения callback.

Или вы можете использовать синтаксис Promise.then(), который делает то же самое:

const myAsynchronousFunction = (data, callback) => {
  ajaxCall(data).then(() => callback())
}

Когда ajaxCall Обещание выполнено, оно запускает then(), которое затем выполнит ваш callback()

...