【问题标题】:async not waiting for await in callback to finish异步不等待回调中的等待完成
【发布时间】:2019-02-07 00:52:10
【问题描述】:

我仍然是 async 和 awaits 的新手,但这就是我的工作。

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

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

函数 _getImageURLs() 仍在返回,无需等待 AWSS3Helper.GetImageUrls 完成。我猜这与在回调函数中有关。回调是否也需要异步?

【问题讨论】:

    标签: javascript callback async-await


    【解决方案1】:

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

      async function _getImageURLs(folder) {
             if (!id) return;
    
             foo.AWSS3Helper.GetImageUrls(so, await function (imageUrls) {
                 return  imageUrls;
             });
        }

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

        用 observables 试试。像这样的……

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

        【讨论】:

          猜你喜欢
          • 2020-10-04
          • 2021-06-30
          • 2019-06-16
          • 2018-03-05
          • 1970-01-01
          • 2019-05-31
          • 2021-11-13
          相关资源
          最近更新 更多