首页 > 解决方案 > 我应该一直在回报一个承诺吗?

问题描述

我一直在从我的 PlayersController 代码中的几个点调用方法 MediaNext() 来链接下一个媒体播放(如果有)。

MediaNext():any {  // any could be typed like Media_I
   if(cond1) {
      ...
      return Media1
    }
   if(cond2) {
      ...
      return Media1
    }
    //
    if(! AutoPlayNext) return null;
    //
    if(NoMoreMedia) return null;
    //
    If (condX) {
      // in order to wait for the Load() method I am subscribing to its promise
      this.Service1.Load(Media).then(() => {
         ...processing...
         return Media
      })
      ??? what do I return here, it does not make sense to return null, since potentially a Media is on its way ???
    }
    return null // safe catch. nomore media should not happen.
}

我的问题

  1. 通过订阅 .Load() 的承诺,我在 JS 中收集的内容的执行不应该被阻止等待媒体数据返回。相反,执行需要流动并且对 MediaNext() 的调用必须返回。但是,我可以在上面的代码“???”中指示的地方返回什么。

  2. MediaNext() 是否应该被编码为针对所有条件返回一个承诺?

当我编写 Promise 和 observables 时,我通常会猜测工作,因为它们仍然是一个难以理解和掌握的野兽,所以请随意建议替代方案。

谢谢您的帮助。

标签: javascripttypescriptpromise

解决方案


如果您以.Load异步方式处理并立即返回,则该函数没有充分的理由返回任何内容。该操作仍在后端进行。

但是,如果您希望调用者获得有关操作是否成功的更多信息,您应该返回一个承诺。

如果你想返回一个 Promise,你可能会发现把它写成一个异步函数要容易得多,然后使用await this.Service1.Load(). 而不是then().


推荐阅读