Как заставить стороннюю функцию javascript, которая делает асинхронное поведение вести себя как http-запрос angular2?

1

Я использую AWS-SDK для загрузки изображений в ведро S3. Я делаю это, потому что для этого не существует библиотеки angular4. Функция выглядит так...

  public uploadImageToS3(fileInput:any, imageNumber){


    let AWSService = (<any> window).AWS;
    let file =  fileInput.target.files[0];

    let fileNameAdjusted = this.imagePathService.getRandomString()+file.name;

    AWSService.config.accessKeyId = "access key";
    AWSService.config.secretAccessKey = "secret access key";
    var s3 = new AWSService.S3({signatureVersion:'V4'});
    let bucket = new AWSService.S3({params:{Bucket:"bucket name"}, signatureVersion:'v4', ContentType: 'image/jpeg', ACL: 'public-read'});

    //I think the Key value is the name of the file to be written to S3, but not sure.
    let params =  {Key:fileNameAdjusted, Body:file};
    bucket.upload(params, function(error, res){

        console.log(imageNumber);
        console.log(res);
        console.log(error);
        if(error!=null && imageNumber==1){
          return res;
        }
        else{
          return error;
        }

      }
    );

  }

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

Когда это делается с угловым4 'toPromise()', используется в HTTP-запросе, а также функция 'then()', которая действует как обработчик обратного вызова. В любом случае, чтобы получить это поведение/функциональность с вышеуказанным кодом javascript в приложении angular4?

Теги:
angular
amazon-s3
http

1 ответ

0

Вам нужно изменить команду bucket.upload, чтобы выглядеть так.

bucket.upload({params, function(err, data) {
if (err) {
  return alert('There was an error uploading your photo: ', err.message);
}
// Do Successfull upload scenario
alert('Successfully uploaded photo.');
});

Ссылка: http://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/s3-example-photo-album.html

  • 0
    Спасибо за ваш ответ, но я не вижу, как это решает проблему. Поправьте меня, если я ошибаюсь, но вы, кажется, добавили функциональность обработки ошибок, которая не относится к моему вопросу.
  • 0
    В сценариях обратного вызова / асинхронного мы обрабатываем ответы, используя сначала обработку ошибок. Есть еще одна часть кода, которая обрабатывает успешную загрузку. сценарий. Проверьте мой комментарий там. Теперь проблема, с которой вы сталкиваетесь, так как вызов асинхронный, вы не можете отправить возвращаемое значение. В этом случае у вас есть оба сценария или = f ошибка и успех покрыты. Все, что вам нужно сделать, это написать последовательность для успешного сценария. Вместо вызова функций и обработки возвращаемых значений из них.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню