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