Javascript 在使用promise.then时,是否可以保留在单击事件调用堆栈中?

Javascript 在使用promise.then时,是否可以保留在单击事件调用堆栈中?,javascript,android,angularjs,html,html5-audio,Javascript,Android,Angularjs,Html,Html5 Audio,音频元素上的play()方法必须由用户启动的事件触发,但它看起来像是。然后,我的单击事件中使用的会中断调用堆栈。我必须使用。然后在这种情况下使用 ng click在其控制器中调用open(file),这只是我的“播放器”服务中对open()的引用 open()来自“播放器”服务: getUrl()只返回字符串承诺 playUrl()来自“音频”服务: 现在我可以audio.play()通过我的“audio”服务中的另一种不使用任何承诺的方法来实现。我可以从open()进行此操作吗 当使用prom

音频元素上的
play()
方法必须由用户启动的事件触发,但它看起来像是
。然后,我的单击事件中使用的
会中断调用堆栈。我必须使用
。然后在这种情况下使用

ng click在其控制器中调用
open(file)
,这只是我的“播放器”服务中对
open()
的引用

open()
来自“播放器”服务:

getUrl()
只返回字符串承诺

playUrl()
来自“音频”服务:

现在我可以
audio.play()
通过我的“audio”服务中的另一种不使用任何承诺的方法来实现。我可以从
open()
进行此操作吗

当使用
promise.then时,是否可以停留在单击事件调用堆栈中

在这种情况下没有。如果承诺是同步完成的,这是可能的,但通常承诺用于异步完成的情况,这里就是这种情况

相反,您希望在单击之前完成
storage.getUrl
部分(预加载),以便在用户事件期间播放

this.open = function(file){
  storage.getUrl(file)
    .then(function(url){
      audio.playUrl(url);
    });
};
function playUrl(url){
  audio.src = url;
  audio.play();
};