Как выполнить несколько запросов с помощью RestClient для Unity, а затем выполнить функцию, когда все запросы будут завершены?

#c# #rest #unity3d #promise

Вопрос:

Использование этой библиотеки https://github.com/proyecto26/RestClient Я хочу получить несколько изображений с сервера s3, а затем выполнить функцию, когда все они будут загружены. У меня есть:

 RestClient.Get(url).Then( response => {
            byte[] imageBytes = response.Data;
            string pathToSaveImage = "/some/example/local/absolute/path/to/image.jpg";
            File.WriteAllBytes(pathToSaveImage, imageBytes)
        } ).Catch( err => {
            Debug.Log(err.Message);
        } );
 

но если я повторю список URL-адресов, как я узнаю, когда все запросы будут выполнены?

Новичок в C# и Unity. Любая помощь будет признательна! Спасибо!

Ответ №1:

Если вам нужно использовать «RestClient», используйте правильный запрос, чтобы получить фотографию. Вы можете использовать следующий код:

 var currentRequest = new RequestHelper { 
  Uri = "https://jsonplaceholder.typicode.com/photos",
  Headers = new Dictionary<string, string> {
    { "Authorization", "Other token..." }
  },
  Params = new Dictionary<string, string> {
    { "param1", "Other value..." }
  }
};
RestClient.GetArray<Photo>(currentRequest).Then(response => {
  EditorUtility.DisplayDialog("Header", currentRequest.GetHeader("Authorization"), "Ok");
}); 
 

Кроме того, если вы загружаете несколько фотографий, попробуйте получить URL-адрес для нескольких фотографий в соответствии с запросом.

Вы можете узнать статус, используя следующее:

 currentRequest.UploadProgress; //The progress by uploading data to the server
currentRequest.UploadedBytes; //The number of bytes of body data the system has uploaded
currentRequest.DownloadProgress; //The progress by downloading data from the server
currentRequest.DownloadedBytes; //The number of bytes of body data the system has downloaded
currentRequest.Abort(); //Abort the request manually
 

Комментарии:

1. Спасибо! Однако у меня есть список<строка> URL-адресов, а не конечная точка, на которой я могу вызвать getArray. Есть ли решение, которое вы можете придумать, которое работает со списком<строка>?

2. @hot_barbara Извините за поздний ответ. Я был в отъезде. Вы можете использовать цикл для своего списка и выполнить итерацию после завершения DownloadProgress из состояния запроса.