异步不等待回调中的等待完成

时间:2019-02-06 16:24:43

标签: javascript callback async-await

我仍然是异步的新人,正在等待,但这就是我正在使用的。

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

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

功能 _getImageURLs()仍在返回,而无需等待AWSS3Helper.GetImageUrls完成。我想这与在回调函数内部有关。回调也需要异步吗?

3 个答案:

答案 0 :(得分:0)

在函数上而不是在return语句上使用await

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

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

答案 1 :(得分:0)

尝试使用可观察的东西。像这样...

   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'); }
             });


        }

答案 2 :(得分:0)

据我所见,这里没有任何承诺,您在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
 };