JavaScript асинхронный с несколькими ожидают - PullRequest
0 голосов
/ 22 ноября 2018

У меня есть три api-запроса для работы асинхронно, но второй запрос работает до того, как первый запрос будет завершен.Как получить второй запрос API для запуска после завершения первого запроса, а затем третий после второго?

async doSave(event)
{
  await this.server.post('/insertRecord',{name:'joe'});

            //have to work after completion of above request

  await this.server.post('/changeCountry',{countryName:'US'});

          //have to work after completion of above request

  await this.server.post('/satge',{stage:'fifth'});
}

Ответы [ 3 ]

0 голосов
/ 22 ноября 2018

в идеале this.server - должен возвращать обещания (например, возвращает обещания), но если это не так, вы можете использовать Promises вместо Async/await и последовательно связывать ваши запросы.

0 голосов
/ 22 ноября 2018

Сервер должен вернуть обещание, в этом случае await будет ждать его разрешения.В приведенном ниже коде я сделал макет сервера, чтобы проверить весь код.Он будет выполнять работу синхронно.

const server = {
  post: function(url, data) {
    const time = 300 + Math.random() * 1500;
    console.log("Posting at " + url + " ... (" + Math.round(time) + "ms)");
    return new Promise(resolve => setTimeout(() => resolve(), time)
    );
  }
};

async function doSave(event) {
  await server.post('/insertRecord', {
    name: 'joe'
  });

  //have to work after completion of above request
  console.log('doing Work after InsertRecord');
  await server.post('/changeCountry', {
    countryName: 'US'
  });

  //have to work after completion of above request
  console.log('doing Work after changeCountry');
  await server.post('/satge', {
    stage: 'fifth'
  });
}
doSave();

Вывод:

Posting at /insertRecord ... (1306ms)
doing Work after InsertRecord
Posting at /changeCountry ... (1752ms)
doing Work after changeCountry
Posting at /satge ... (1616ms)

Проверьте по этой ссылке для получения дополнительной информации об ожидающих, асинхронных, обещаниях

0 голосов
/ 22 ноября 2018

Если ваш второй запрос начинается до вашего первого запроса, это означает, что Обещание, возвращенное this.server.post, разрешается до того, как запрос будет завершен.Кроме того, он вообще не возвращает Promise, и в этом случае он запускает ваш асинхронный запрос, а затем запускает следующую строку в этой функции после возврата this.server.post.

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