javascript - 我应该一直在回报一个承诺吗?
问题描述
我一直在从我的 PlayersController 代码中的几个点调用方法 MediaNext() 来链接下一个媒体播放(如果有)。
- 这个 MediaNext() 方法从内存中的一些不同播放列表中返回一个 Media 对象。因此,它尝试封装获取下一个 Media 对象(如果有的话)的概念。
- 然而,最近我修改了 MediaNext() ,对于一些新的条件 XI 现在必须加载外部数据才能返回这个替代媒体对象。
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.
}
我的问题
通过订阅 .Load() 的承诺,我在 JS 中收集的内容的执行不应该被阻止等待媒体数据返回。相反,执行需要流动并且对 MediaNext() 的调用必须返回。但是,我可以在上面的代码“???”中指示的地方返回什么。
MediaNext() 是否应该被编码为针对所有条件返回一个承诺?
当我编写 Promise 和 observables 时,我通常会猜测工作,因为它们仍然是一个难以理解和掌握的野兽,所以请随意建议替代方案。
谢谢您的帮助。
解决方案
如果您以.Load
异步方式处理并立即返回,则该函数没有充分的理由返回任何内容。该操作仍在后端进行。
但是,如果您希望调用者获得有关操作是否成功的更多信息,您应该返回一个承诺。
如果你想返回一个 Promise,你可能会发现把它写成一个异步函数要容易得多,然后使用await this.Service1.Load()
. 而不是then()
.