async не ждет ожидания в обратном вызове, чтобы закончить - PullRequest
0 голосов
/ 06 февраля 2019

Я все еще новичок с асинхронностью и ждет, но это то, с чем я работаю.

    async function _getImageURLs(folder) {
         if (!id) return;

         foo.AWSS3Helper.GetImageUrls(so, function (imageUrls) {
             return await imageUrls;
         });
    }

Функция fuction _getImageURLs () все еще возвращается, не ожидая AWSS3Helper.GetImageUrlsотделки.Я предполагаю, что это как-то связано с нахождением внутри функции обратного вызова.Должен ли быть обратный вызов также асинхронным?

Ответы [ 3 ]

0 голосов
/ 06 февраля 2019

Попробуйте это с наблюдаемыми.Как то так ...

   function _getImageURLs(folder) {
             if (!id) return;

             const imageUrlObservable = of(foo.AWSS3Helper
                  .GetImageUrls(so, function (imageUrls) {
                     return imageUrls;
                   })
             );

             imageUrlObservable.subscribe({
                 next(imageUrL) { console.log(imageUrL) },
                 complete() { console.log('Finished sequence'); }
             });


        }
0 голосов
/ 06 февраля 2019

Насколько я вижу, здесь нет никаких обещаний, у вас есть механизм обратного вызова на API, поэтому использование async/await кажется бессмысленным

Вы должны передать обратный вызов методу и вызвать его, как толькоу вас есть результат

function _getImageURLs(folder, callback) {
     if (!id) callback();

     foo.AWSS3Helper.GetImageUrls(so, function (imageUrls) {
         callback(imageUrls);
     });
}

_getImageURLs("somefolder", function(result) {
   console.log(result);
   // do whatever you want here with the result
 };
0 голосов
/ 06 февраля 2019

Использовать await для функции, а не для оператора return

  async function _getImageURLs(folder) {
         if (!id) return;

         foo.AWSS3Helper.GetImageUrls(so, await function (imageUrls) {
             return  imageUrls;
         });
    }
...